mod_wsgi:导入具有相同名称的python模块

时间:2011-07-09 00:12:41

标签: python import mod-wsgi

这是import python modules with the same name的后续问题,但由于这两者有些不相关,因此提出一个新问题可能更好:

我有几个python项目,他们都有一个conf包:

/some_folder/project_1/
  conf/
    __init__.py
    some_source_file.py

/another_folder/project_2/
  conf/
    __init__.py
    another_source_file.py

对于每个项目,我在site-packages文件夹中创建了一个包含以下内容的.pth文件:

.../site-packages/project_1.pth:
import sys; sys.path.append('/some_folder/project_1/')

.../site-packages/project_2.pth:
import sys; sys.path.append('/another_folder/project_2/')

现在,访问conf模块适用于/ some_folder / project_1 /:

import conf.some_source_file

但不适用于/ another_folder / project_2 /:

import conf.another_source_file
AttributeError: 'module' object has no attribute 'another_source_file'

这可能是因为python只搜索sys.path中任何文件夹下面的第一个conf路径。

因此我将pr​​oject_1和project_2转换为python包并在其中添加了一个符号链接,因此我可以以完全合格的方式访问这两个conf包:

/some_folder/project_1/
  __init__.py
  project_1 <-- symlink to .
  conf/
    __init__.py
    some_source_file.py

/another_folder/project_2/
  __init__.py
  project_2 <-- symlink to .
  conf/
    __init__.py
    another_source_file.py

在普通的python脚本中,我现在可以从两个conf包中导入模块:

import project_1.conf.some_source_file
import project_2.conf.another_source_file

但是,当我尝试使用mod_wsgi Apache模块在WSGI应用程序中执行相同操作时,第二个项目的导入失败。具体来说,wsgi'start file'(即在我的虚拟服务器的Apache配置文件中的WSGIScriptAlias语句中引用了wsgi后缀的那个)成功导入/ another_folder / project_2 /中的模块,该模块又导入project_2 / conf / another_source_file的.py。

第二次导入失败,尽管/ another_folder / project_2 /在sys.path中。 WSGI应用程序以守护进程模式运行。

如何对此进行排序?

1 个答案:

答案 0 :(得分:0)

FWIW,这是在mod_wsgi邮件列表和内存中处理的,结果是由于存在同名的模块和包而导致错误的。