2

我有一个小型web.pyPython 应用程序,我想在 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>

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

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

对此的任何帮助将不胜感激。

谢谢!

更新#1

Ned 的回复让我在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/ (基本上将其从 egg 文件/目录中取出),则mod_python不再抱怨缺少web 模块(当然,它随后开始抱怨缺少其他第三方模块)。

我已将 Apache 配置为以我的用户和组身份运行,也就是说ayaz,我检查了 /home/ayaz/.python-eggs目录上的权限是否正常。

然后我在 Django 部署文档页面上使用了这个Using egg with mod_python被欺骗了。但这没有帮助。mod_python最终,我咬紧牙关,对于每个抱怨找不到 的第三方模块 ,我将实际目录从 egg 内部的那个模块移到了 egg 之外,并移到site-packages了虚拟环境的目录中。这使得 mod_python找到模块。

现在,我真的不确定为什么会发生这种情况,以及为什么mod_python无法读取鸡蛋。

4

2 回答 2

1

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

于 2010-12-08T19:05:08.593 回答
1

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

Ned 的回复让我在 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/ (基本上将其从 egg 文件/目录中取出),mod_python 停止抱怨缺少的 web 模块(当然,它开始抱怨缺少其他第三方模块)。

我已将 Apache 配置为作为我的用户和组运行,即 ayaz,并且我检查了该 /home/ayaz/.python-eggs目录的权限是否正常。

然后我在 Django 部署文档页面上使用了这个Using egg with mod_python被欺骗了。但这没有帮助。最终,我咬紧牙关,对于 mod_python 抱怨找不到的每个第三方模块,我将实际目录从 egg 内部的那个模块移到了 egg 之外,并进入了虚拟环境的 site-packages 目录. 这使得 mod_python 找到了模块。

现在,我真的不确定为什么会发生这种情况,以及为什么 mod_python 无法读取鸡蛋。

于 2011-05-12T08:14:13.663 回答