我正在探索mod_python,我在导入包时遇到了问题。
我有这样的结构:
my base dir
|
+- __init__.py
+- index.py
+- package (directory)
|
+- __init__.py
+- package.py (file)
和这样的Apache虚拟主机:
<VirtualHost *:80>
ServerAdmin root at localhost
ServerName myname
DocumentRoot /path/to/my base dir
<Location />
DirectoryIndex index.html index.py
Options Indexes MultiViews FollowSymLinks
AddHandler mod_python .py
PythonHandler mod_python.publisher
</Location>
</VirtualHost>
在index.py文件中的我是这样的:
from package.package import myobject
....
....
当我从Apache加载index.py时,我得到500内部服务器错误 如下:
ImportError: No module named package.package
我做错了什么?
干杯, 伊万
答案 0 :(得分:3)
首先,如果您刚刚开始使用Python Web部署,那么您应该不使用mod_python。它现在正式成为一个死项目,已被弃用。改为使用mod_wsgi。
您的代码的实际问题是您没有将根目录放在Python路径上,因此mod_python不知道在哪里找到它。 DocumentRoot用于静态文档,而不是代码 - 实际上你不应该将它设置为你的基础目录,因为这是不安全的,并且可能导致你的Python代码的内容通过网络暴露,这不是你想要的。
相反,请使用PythonPath指令:
PythonPath "['/path/to/my base dir']"
答案 1 :(得分:0)
确保你的PYTHONPATH是正确的: http://www.modpython.org/live/mod_python-3.2.8/doc-html/dir-other-pp.html
答案 2 :(得分:0)
在mod_python 3.3中,mod_python.publisher的Python代码文件结构不是包。请务必阅读:
http://www.modpython.org/live/current/doc-html/pyapi-apmeth.html
具体来说,有关import_module()的文档,因为它解释了代码导入的工作原理。