簡體   English   中英

使用 EC2 實例上的虛擬環境從瀏覽器運行 Python 腳本

[英]Run Python script from browser using virtual environment on EC2 instance

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'

我試過的:

  • 我嘗試使用以下方法更改虛擬環境的權限:

    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

筆記:

  • 請注意,如果我只導入 datetime 並注釋掉 bs4 和 requests(以及關於 BeautifulSoup 的所有其他內容),那么該腳本可以很好地工作,因為它不必訪問虛擬環境來拉入包。

*虛擬環境教程

您收到此錯誤是因為您尚未將 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM