使用 CGI - python 查找模块时遇到问题
Using CGI - python having problem finding modules
我正尝试通过 CGI 运行 一个 python-脚本,但出现内部服务器错误
根据 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())
...
如果它不是同一个 Python 可执行文件,那就有问题了,因此您 运行 是 Python 的安装,但没有安装 BeautifulSoup。您需要使用相同的可执行文件或从 this 可执行文件创建虚拟环境,在虚拟环境中安装所需的模块并将 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
我正尝试通过 CGI 运行 一个 python-脚本,但出现内部服务器错误
根据 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())
...
如果它不是同一个 Python 可执行文件,那就有问题了,因此您 运行 是 Python 的安装,但没有安装 BeautifulSoup。您需要使用相同的可执行文件或从 this 可执行文件创建虚拟环境,在虚拟环境中安装所需的模块并将 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