[英]Run Python script from browser using virtual environment on EC2 instance
我在我的 EC2 實例上創建了一個虛擬環境。 如何從瀏覽器訪問它?
嘿大家,
我按照本教程在我的 EC2 實例上創建了一個虛擬環境,以運行一個簡單的 Python 腳本。 在終端內,它可以正常工作。 但是,我制作了一個 web 應用程序,我想使用虛擬環境從瀏覽器激活此腳本。 當我嘗試這個時,我收到“權限被拒絕”錯誤。
$output=shell_exec('bash /var/app/current/scripts/script.sh');
echo "<pre>$output</pre>";
#!/bin/bash
source /home/ec2-user/venv/python3/bin/activate
python3 /var/app/current/scripts/test.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'
我嘗試使用以下方法更改虛擬環境的權限:
chmod a+x /home/ec2-user/venv
這應該使所有用戶都可以訪問虛擬環境文件夾:/home/ec2-user/venv
但是,我仍然收到錯誤消息:
/home/ec2-user/venv/python3/bin/activate: Permission denied
我還嘗試讓所有用戶都可以執行激活腳本(/home/ec2-user/venv/python3/bin/activate):
chmod 665 /home/ec2-user/venv/python3/bin/activate
結果是:
-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
您收到此錯誤是因為您尚未將 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
我從這篇文章中得到了一些幫助,但是需要修改一些東西。
讓我們深入了解他的答案是什么:
sudo chown -R your_username:your_username path/to/virtuaelenv/
好的,這很好,但我需要一些信息。
對我來說,web 應用程序的用戶名是 webapp。
然后,上面不太清楚的一件事是路徑。 所以,我的路徑是:
/home/ec2-user/venv/python3/bin/activate
正如剛才提到的。 在這里,您需要將權限更改為/home/ec2-user
而不是/home/ec2-user/venv
所以,為了讓我的應用程序訪問我的虛擬環境,我需要運行:
sudo chown -R webapp:webapp /home/ec2-user
但是,這在瀏覽器中有效。 這剝奪了我在服務器上使用它的能力,為此:我必須將其切換回:
sudo chown -R ec2-user:ec2-user /home/ec2-user
來回切換遠非理想,我嘗試使用chmod
更改權限。
sudo chmod 711 /home/ec2-user
現在我擁有讀取、寫入和執行權限,而其他所有人,包括 web 應用程序,都只能執行。
現在一切正常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.