Python 为什么可以';当I';我在网上运行CGI脚本?

Python 为什么可以';当I';我在网上运行CGI脚本?,python,cgi,bioinformatics,biopython,Python,Cgi,Bioinformatics,Biopython,我不知道这里有什么问题: 我有一些来自Biopython的模块,当使用交互式提示符或通过命令行执行python脚本时,我可以轻松导入这些模块 问题是,当我尝试在web可执行cgi脚本中导入相同的biopython模块时,会出现“导入错误” :没有 名为Bio的模块 有什么想法吗?在cgi脚本中,您可以尝试在任何导入之前添加此包的路径 sys.path.insert(0, 'path to biopython package') 如果您使用的是Apache,那么应该能够使用指令SetEnv在co

我不知道这里有什么问题:

我有一些来自Biopython的模块,当使用交互式提示符或通过命令行执行python脚本时,我可以轻松导入这些模块

问题是,当我尝试在web可执行cgi脚本中导入相同的biopython模块时,会出现“导入错误”

:没有 名为Bio的模块


有什么想法吗?

在cgi脚本中,您可以尝试在任何导入之前添加此包的路径

sys.path.insert(0, 'path to biopython package')
如果您使用的是Apache,那么应该能够使用指令SetEnv在conf文件中设置PYTHONPATH

SetEnv PYTHONPATH "path to biopython package"

以下是几种可能性:

  • Apache(在Unix上)通常作为不同的用户在不同的环境下从命令行运行到python。尝试制作一个小脚本,只打印出
    sys.version
    sys.prefix
    ,并通过apache和命令行比较结果,以确保在这两种环境中运行相同的python安装
  • Biopython是安装在您的主目录下,还是仅对您的普通用户可读?同样,由于apache通常作为不同的用户运行,可能您没有访问该位置的权限,因此无法导入它
  • 在尝试导入Biopython之前,您是否可以尝试导入站点?当您运行apache时,可能有什么东西阻止了站点包的导入

    • 我也有同样的问题。我通过终端中的命令更改Linux Ubuntu中Apache的用户,解决了这个问题:

      sudo gedit /etc/apache2/envvars
      
      请将
      www-data
      上的
      export-APACHE\u-RUN\u-USER
      export-APACHE\u-RUN\u-GROUP
      更改为当前用户或可以运行python脚本的用户。

      玩得开心;)

      import-Bio
      在从命令行运行的Python解释器中工作吗?我自己从来没有遇到过这种问题。所以我只能猜测。当您使用pythonshell时,您的CGI脚本是否调用与您相同的python版本?你的biopython模块是以一种全球使用的方式安装的,还是仅仅在你的外壳测试中你有一个对biopython的本地访问权限,可能是因为你在biopython文件夹或其他地方尝试过?希望有点帮助。对于Cristian-导入Bio确实可以通过命令行或交互式解释器执行,如果您使用mod_python模块或real CGI?到erkib-biopython与其他模块(如站点包文件夹中的numpy)一起安装,这与我的开发目录不同。我已经尝试通过“sys.path.insert”添加路径,问题是,当我在交互提示中输入“sys.path”时,包含的文件夹已经显示出来。我正在使用apache。通过在交互提示符下运行sys.version,看起来apache运行的python版本与曾经从bash访问的python版本不同。由于我没有根访问权限,我将尝试在家中本地安装biopython。谢谢一个更好的解决方案可能是将必要的
      PYTHONPATH
      赋值放在其中。