Я пытаюсь запустить python-скрипт через CGI, но получаю внутреннюю ошибку сервера
журнал ошибок согласно apache2:
[Mon Dec 21 10:43:19.073771 2020] [cgi:error] [pid 7531] [client ::1:50038] AH01215: File "/usr/lib/cgi-bin/pytest.py", line 5, in <module>: /usr/lib/cgi-bin/pytest.py
[Mon Dec 21 10:43:19.073809 2020] [cgi:error] [pid 7531] [client ::1:50038] AH01215: from bs4 import BeautifulSoup : /usr/lib/cgi-bin/pytest.py
[Mon Dec 21 10:43:19.073832 2020] [cgi:error] [pid 7531] [client ::1:50038] AH01215: ModuleNotFoundError: No module named 'bs4': /usr/lib/cgi-bin/pytest.py
Все дело в довольно простом скрипте-скребке, который я хочу запустить через CGI. Я хотел бы подчеркнуть, что нормальный запуск этого скрипта через терминал не проблема, это просто проблема с использованием CGI.
Можно ли это решить, или CGI не подходит для таких сценариев?
код:
#! /usr/bin/python3
# enable debugging
import cgitb
from bs4 import BeautifulSoup
from urllib.request import urlopen, Request
import os
cgitb.enable()
print ("Content-type: text/html\r\n\r\n")
print("hello")
url = "https://www.xxxxxxxxxxxxx"
soup = BeautifulSoup(urlopen(url).read())
...
@Booboo - извините, здесь просто опечатка при вставке кода в stackoverflow! Ну, это не тот же исполняемый файл, а тот же код. Как я уже писал, я могу запустить скрипт в терминале ( ./scraper.py) в Debian, но не через URL-адрес. Я также могу добавить, что на самом деле я могу запустить этот скрипт через cgi, ЕСЛИ я закомментирую их команду импорта и остальную часть синтаксиса BeautifulSoup, конечно. Я могу хотя бы напечатать привет на странице с помощью python3, я отредактирую текст
Я подумал, что это может быть опечатка. Если это не тот же исполняемый файл Python, это проблема. Поэтому вы используете установку Python, в которой не установлен BeautifulSoup. Вам нужно использовать тот же исполняемый файл или создать виртуальную среду из этого исполняемого файла, установить необходимые модули в виртуальной среде и указать shebang на исполняемый файл Python в виртуальной среде.
@Booboo спасибо, если хотите, вы можете сделать из этого ответ, и я могу принять его, если он решит проблему.
Если это не тот же исполняемый файл Python, это проблема. Поэтому вы используете установку Python, в которой не установлен BeautifulSoup. Вам нужно использовать тот же исполняемый файл или создать виртуальную среду из этого исполняемого файла, установить необходимые модули в виртуальной среде и указать shebang на исполняемый файл Python в виртуальной среде.
Например, чтобы использовать исполняемый файл /usr/bin/python3
с виртуальной средой, в которой есть ваши модули:
cd /home/usr/mydir
/usr/bin/python3 -m venv my_venv
cd my_venv/bin
. activate
pip install bs4
deactivate
Затем измените shebang, чтобы указать на:
#!/home/usr/mydir/my_venv/bin/python3
Ваш шебанг выглядит неправильно. Как он вообще запускается? Когда вы запускаете его из командной строки, вы используете тот же исполняемый файл Python? Или настроена переменная среды PYTHONPATH? Или у вас закончилась виртуальная среда?