我有一个小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
不是 能够通读鸡蛋。
答案 0 :(得分:1)
可能是文件或目录权限问题吗?验证virtualenv
site-packages
中的所有文件和目录是否都可以从运行Apache
和mod_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不是 能够通读鸡蛋。