将模块加载到apache + mod-wsgi中

时间:2010-11-12 07:48:04

标签: python apache mod-wsgi

我正在使用Apache + mod-wsgi。

在我的httpd.conf中,我在文件末尾有以下附加行。

LoadModule wsgi_module modules/mod_wsgi-win32-ap22py27-3.3.so
WSGIScriptAlias / "C:/Projects/Folder/web/"
<Directory "C:/Projects/Folder/web">
AllowOverride None
Options None
Order deny,allow
Allow from all
</Directory>

当我通过http://localhost/script/index.py

在Windows中执行以下index.py脚本时
def application(environ, start_response):
    status = '200 OK' 
    output = 'Hello World!'
    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output]

工作得很好。

但是,当我在import utils的第一行添加index.py时,我得到了

ImportError: No module named utils

utils.pyindex.py

目录相同

我需要设置其他配置吗?

我尝试@dan_waterworth提供的建议

import sys, os
sys.path.append(os.path.dirname(__file__))

通过导入我自己的模块,我没有得到更多错误。但是,当我导入通过easy_install安装的模块时,会发生错误。

   File "C:/Projects/Folder/web/script\\connection.py", line 1, in <module>
     import psycopg2
   File "build\\bdist.win32\\egg\\psycopg2\\__init__.py", line 65, in <module>
     from psycopg2 import tz
 ImportError: cannot import name tz
如果此脚本作为独立应用程序执行,则

import psycopg2执行没有问题。

3 个答案:

答案 0 :(得分:6)

我发现我必须添加几行来追加python路径。类似的东西:

import sys, os
sys.path.append(os.path.dirname(__file__))

import utils

对于第二部分,只需为导入目录添加其他行。即:

sys.path.append([enter path here])

找到你的导入目录,输入交互式python提示符:

import sys
print sys.path

答案 1 :(得分:1)

其他答案的重点是让脚本本身破坏自己的PYTHONPATH。另一种方法是找出正确的Apache设置,为Python和WSGI应用程序设置可行的路径。

我在conf文件中有这些:

PassEnv PYTHONPATH
WSGIPythonHome  C:/Python/Python26
WSGIPythonPath  C:/Python/Python26;C:/myproject/PyLib

如果您不想通过环境的PYTHONPATH,我认为您可以使用:

SetEnv PYTHONPATH C:/your/paths/go/here;C:/and/here

我建议你试一试。

答案 2 :(得分:0)

sys.pathsys.modules检查目录是否实际添加为模块目录。如果不是sys.path.append它。