Запустить сценарий Python из браузера с использованием виртуальной среды на экземпляре EC2 - PullRequest
0 голосов
/ 06 мая 2020

TL; DR;

Я создал виртуальную среду на своем экземпляре EC2. Как я могу получить к нему доступ из браузера? простой Python скрипт. В терминале работает без ошибок. Однако я создал веб-приложение и хотел бы активировать этот скрипт из браузера, используя виртуальную среду. Когда я пытаюсь это сделать, я получаю сообщение об ошибке «Permission denied».

PHP

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

script. sh

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

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)

error

/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

Примечание:

  • Обратите внимание, что если я только import datetime, и я закомментирую bs4 и запросы (вместе со всем остальным, что касается g BeautifulSoup), скрипт отлично работает, так как ему не требуется доступ к виртуальной среде для загрузки пакетов.

* Учебник по виртуальной среде

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вы получаете эту ошибку, потому что вы не добавили библиотеки, которые используются в сценарии 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
0 голосов
/ 06 мая 2020

Решено!

Мне помогли этот пост , однако нужно было изменить несколько вещей.

Давайте погрузимся в его ответ:

sudo chown -R your_username: your_username path / to / virtuaelenv /

Хорошо, это здорово, но мне нужна была немного информации.

Для Для меня имя пользователя веб-приложения - webapp.

Тогда одна вещь, которая не очень ясна выше, - это путь. Итак, мой путь:

/home/ec2-user/venv/python3/bin/activate

, как упоминалось выше. Здесь вам нужно изменить разрешения на /home/ec2-user и NOT на /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

Теперь у меня есть разрешения на чтение, запись и выполнение, тогда как все остальные, включая веб-приложение, могут только выполнять.

Теперь все работает ?

...