为什么在从网页运行CGI脚本时Python找不到某些模块?
我不知道这里可能是什么问题:
我有一些来自Biopython的模块,在使用交互式提示符或者通过命令行执行Python脚本时,我可以很轻松地导入它们。
但是,当我尝试在一个可以在网页上执行的cgi脚本中导入同样的Biopython模块时,我却遇到了“导入错误”。
: 没有名为Bio的模块
有什么想法吗?
3 个回答
1
我也遇到过同样的问题。我通过在终端里输入命令,改变了Linux Ubuntu中Apache的用户来解决这个问题:
sudo gedit /etc/apache2/envvars
请把 www-data
在 export APACHE_RUN_USER
和 export APACHE_RUN_GROUP
中改成你当前的用户,或者是可以运行Python脚本的用户。祝你好运;)
4
在这个cgi脚本中,你可以尝试在任何导入之前,添加这个包的路径。
sys.path.insert(0, 'path to biopython package')
如果你使用的是Apache服务器,你可以在配置文件中通过SetEnv指令来设置PYTHONPATH。
SetEnv PYTHONPATH "path to biopython package"
7
这里有几个可能的原因:
- Apache(在Unix系统上)通常以不同的用户身份运行,并且环境也和你在命令行中运行Python时不同。你可以试着写一个小脚本,简单地打印出
sys.version
和sys.prefix
,然后分别通过Apache和命令行运行这个脚本,看看两个环境中Python的安装是否是一样的。 - Biopython是安装在你的家目录下,还是只有你这个普通用户能读取?因为Apache通常以不同的用户身份运行,可能你没有权限访问那个位置,所以无法导入它。
- 你能在尝试导入Biopython之前先执行
import site
吗?也许在通过Apache运行时,有什么东西阻止了site包的导入。