mod_python 和子包导入问题:ImportError: 没有名为的模块

1 投票
3 回答
3956 浏览
提问于 2025-04-16 00:23

我正在研究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

我哪里做错了呢?

谢谢,
伊万

3 个回答

0

在mod_python 3.3中,mod_python.publisher的Python代码文件结构并不是一个包。确保你阅读一下:

http://www.modpython.org/live/current/doc-html/pyapi-apmeth.html

特别是关于import_module()的文档,因为它解释了代码导入是怎么工作的。

3

首先,如果你刚开始学习如何在网上部署Python应用,不要使用mod_python。这个项目现在已经不再维护了,算是“死掉”了。你应该使用mod_wsgi。

你代码中的实际问题是,你没有把根目录添加到Python的路径中,所以mod_python不知道在哪里找你的文件。DocumentRoot是用来放静态文件的,不是用来放代码的——实际上,你不应该把它设置为你的基础目录,因为这样不安全,可能会导致你的Python代码内容被暴露在网上,这可不是你想要的。

相反,你应该使用PythonPath指令:

PythonPath "['/path/to/my base dir']"

撰写回答