首页 > 解决方案 > 使用 EC2 实例上的虚拟环境从浏览器运行 Python 脚本

问题描述

TLDR;

我在我的 EC2 实例上创建了一个虚拟环境。如何从浏览器访问它?


嘿大家,

我按照本教程在我的 EC2 实例上创建了一个虚拟环境来运行一个简单的 Python 脚本。在终端内,它可以正常工作。但是,我已经制作了一个 Web 应用程序,我想使用虚拟环境从浏览器中激活这个脚本。当我尝试这个时,我收到“权限被拒绝”错误。

PHP

$output=shell_exec('bash /var/app/current/scripts/script.sh');
echo "<pre>$output</pre>";

脚本.sh

#!/bin/bash
source /home/ec2-user/venv/python3/bin/activate
python3 /var/app/current/scripts/test.py

测试.py

from datetime import datetime
from bs4 import BeautifulSoup
import requests

print('hello')
print(datetime.now())

url = "https://www.stackoverflow.com/"
website = requests.get(url).text
soup = BeautifulSoup(website, "html.parser")
print(soup.title)

错误

/var/app/current/scripts/script.sh: line 2: /home/ec2-user/venv/python3/bin/activate: Permission denied
Traceback (most recent call last):
  File "/var/app/current/scripts/test.py", line 2, in <module>
    from bs4 import BeautifulSoup
ModuleNotFoundError: No module named 'bs4'

我试过的:

这应该使所有用户都可以访问虚拟环境文件夹:/home/ec2-user/venv

但是,我仍然收到错误消息:

/home/ec2-user/venv/python3/bin/activate: Permission denied

结果是:

-rw-rw-r-x 1 ec2-user ec2-user  /home/ec2-user/venv/python3/bin/activate

但是,我仍然遇到同样的错误:

/home/ec2-user/venv/python3/bin/activate: Permission denied

笔记:

*虚拟环境教程

标签: pythonlinuxbashamazon-ec2amazon-linux

解决方案


您收到此错误是因为您尚未将 python 脚本中使用的库添加到虚拟环境中。

在您提到的教程中,只安装了 boto 库。

您需要安装您使用的库。从命令行运行:

source /home/ec2-user/venv/python3/bin/activate
pip install beautifulsoup4
pip install requests

或者,您可以创建一个文件并为其命名,/home/ec2-user/requirements.txt例如并列出您的脚本使用的所有要求:

beautifulsoup4
requests

然后您可以使用此文件将所有要求安装到虚拟环境中:

source /home/ec2-user/venv/python3/bin/activate
pip install -r /home/ec2-user/requirements.txt

推荐阅读