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

5

我正在使用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>

当我在Windows中通过http://localhost/script/index.py执行以下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]

运行得非常好。

但是,当我在index.py的第一行添加import utils时,我会遇到以下问题:

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个回答

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
11秒之前,更广泛和更通用的解决方案 :) +1 - soulseekah
我收到了NameError:名称'os'未定义。 - Cheok Yan Cheng
抱歉,我忘记在导入中添加操作系统模块,请现在尝试。 - dan_waterworth
@dan_waterworth,谢谢。有所改善。然而,当我尝试通过easy_install安装模块时,出现了错误。我更新了我的问题。 - Cheok Yan Cheng

1
其他答案侧重于让脚本本身操纵它自己的PYTHONPATH。另一种方法是找出正确的Apache设置,以建立Python和WSGI应用程序的可行路径。
我在我的配置文件中有这些内容:
PassEnv PYTHONPATH
WSGIPythonHome  C:/Python/Python26
WSGIPythonPath  C:/Python/Python26;C:/myproject/PyLib

如果您不想传递环境变量PYTHONPATH,我认为您可以使用以下方法:
SetEnv PYTHONPATH C:/your/paths/go/here;C:/and/here

我建议你试一试这些。

0

sys.pathsys.modules用于检查目录是否实际上被添加为模块目录。如果没有,就使用sys.path.append进行添加。


1
不需要进行检查。如果有重复,Python 只会使用第一个可用的,最多浪费几分之一秒的时间,而且代码更易于阅读。 - dan_waterworth
我的意思是让他分析一下情况。也许目录在sys.path中实际上已经存在,问题并不在于导入。否则谢谢。 - soulseekah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接