mod_python无法在虚拟环境下找到web.py模块

时间:2010-12-08 06:56:43

标签: python apache mod-python web.py

我有一个小web.py Python应用程序,我想在Apache下使用mod_python提供服务。 web.py框架以及相关应用程序所依赖的其他第三方Python模块安装在虚拟环境中。虚拟环境在:/home/ayaz/Sandbox/Scrapper/

内创建

我用于设置此应用程序的Apache虚拟主机配置的相关代码段是:

<Location "/api">
    PythonPath "['/home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/', '/home/ayaz/project/'] + sys.path"
    #PythonHandler wsgiref.modpython_gateway::handler
    PythonHandler modpython_gateway::handler
    SetHandler python-program 
    PythonOption wsgi.application device_api::main
    PythonOption device_api /api/
</Location>

当我尝试访问/api网址时,在浏览器上,我从服务器收到500,日志中出现错误,说明从{}导入的web模块无法找到device_api.py文件(这是我的应用程序);换句话说,我看到ImportError。我不确定为什么它找不到web模块。

我知道PythonPath指令正在工作,至少部分,从Python解释器能够从定义的路径中找到device_api.py文件这一事实判断在该指令中。但是,它无法找到其路径也在同一指令中定义的其余模块。

对此的任何帮助都将深表感谢。

谢谢!

  

更新#1

     

Ned's reply让我看了   通过site-packages目录   对于我拥有的虚拟环境。   权限看起来很好   在我的目录里,我意识到了   那mod_python/Apache无法做到   阅读eggs。自从我安装   虚拟内的所有包   使用easy_install的环境,它们都在表格中   鸡蛋所以,例如,如果我搬家了   目录   /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/web.py-0.34-py2.5.egg/web/   成   /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/   (基本上把它从鸡蛋中取出来   文件/目录),mod_python已停止   抱怨失踪web   模块(当然,然后它开始了   抱怨遗失的其余部分   第三方模块)。

     

我将Apache配置为以我的身份运行   用户和组,即ayaz和我   检查了权限   /home/ayaz/.python-eggs目录   我们很好。

     

然后我使用了这个Using eggs with mod_python欺骗解释   Django部署文档   页。但它没有帮助。   最后,我咬紧牙关,为了   每个第三方模块   mod_python抱怨它不能   找到了,我移动了实际的目录   来自鸡蛋内部的那个模块   在鸡蛋外面进入   site-packages目录   虚拟环境。这个使   mod_python找到模块。

     

现在,我真的不确定为什么会这样   正在发生,为什么mod_python不是   能够通读鸡蛋。

2 个答案:

答案 0 :(得分:1)

可能是文件或目录权限问题吗?验证virtualenv site-packages中的所有文件和目录是否都可以从运行Apachemod_python的用户名访问。

答案 1 :(得分:1)

为了回答这个问题,我将从我的问题中复制更新段落并将它们作为答案发布(因为它们似乎在某种程度上解释了我如何设法摆脱问题)。

  

Ned's reply让我看着   site-packages目录   我有虚拟环境。虽然   权限看起来很好   目录给我,我意识到了   mod_python / Apache无法读取   鸡蛋。自从我安装了全部   虚拟内包   环境使用easy_install,他们   都是鸡蛋的形式。因此对于   例如,如果我移动了目录   /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/web.py-0.34-py2.5.egg/web/   成   /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/   (基本上把它从鸡蛋中取出来   文件/目录),mod_python已停止   抱怨缺少网络   模块(当然,然后它开始了   抱怨遗失的其余部分   第三方模块)。

     

我将Apache配置为以我的身份运行   用户和组,即ayaz和我   检查了权限   /home/ayaz/.python-eggs目录   细

     

然后我使用了这个被Using eggs with mod_python欺骗的解释   Django部署文档页面。   但它没有帮助。最后,我咬了一口   子弹,以及每个第三方   mod_python抱怨它的模块   找不到,我动了实际   那个目录来自鸡蛋内部   模块外面的蛋和进入   site-packages目录   虚拟环境。这个使   mod_python找到模块。

     

现在,我真的不确定为什么会这样   发生了,为什么mod_python不是   能够通读鸡蛋。