混合多个python模块路径

时间:2015-06-30 19:52:24

标签: python module pythonpath

我遇到了一个奇怪的问题,我找不到答案。

我想使用可能位于不同模块中的文件,路径名相同(文件夹包含空的 init .py文件):

road1/pato/
road2/pato/modtest.py

其中modtest只包含a = 1 用于测试的简单脚本test.py包含:

import pato.modtest
print(pato.modtest.a)

并正在运行

PYTHONPATH=road2/ python test.py

按预期运行良好。令人困惑的是,

PYTHONPATH=road1/:road2/ python test.py

给出错误

ImportError: No module named 'pato.modtest'

我读过的所有文档都说PYTHONPATH可能包含多个路径,它应该没问题,运行程序只是按顺序查看它们。但是,在这种情况下,在路径前面添加空路径似乎会阻止从后面的路径中读取。如果这是预期的行为,那很好,我很欣赏有关它的优秀文档的链接。

1 个答案:

答案 0 :(得分:1)

您有命名空间冲突。

  • 根据您的PYTHONOPATH,当您导入" pato.modtest" Python首先看看" pato"或" pato.modtest"存在于当前名称空间中。
  • 由于它们不存在,然后转到sys.path并尝试第一条路径,在你的情况下是" road1 /"。
  • 找到模块" pato"在那里然后寻找对象" modtest",没有找到,它寻找一个模块road1 / pato / modtest,没有找到,它放弃了。