这是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路径。
因此我将project_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应用程序以守护进程模式运行。
如何对此进行排序?
答案 0 :(得分:0)
FWIW,这是在mod_wsgi邮件列表和内存中处理的,结果是由于存在同名的模块和包而导致错误的。