混合多个 python 模块路径
mixing multiple python module path's
我 运行 遇到了 st运行ge 问题,我找不到答案。
我想使用可能位于不同模块中的具有相同路径名的文件(文件夹也包含空 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 可能包含多个路径,应该没问题,运行 程序只是按顺序浏览它们。然而,在这种情况下,在路径前面添加空路径似乎会阻止读取后面的路径。如果这是预期的行为,很好,我会很感激关于它的好文档的链接。
您有命名空间冲突。
- 根据您的 PYTHONOPATH,当您导入 "pato.modtest" 时,Python 首先查看当前命名空间中是否存在 "pato" 或 "pato.modtest"。
- 因为它们不存在,所以它会转到 sys.path 并尝试第一个路径,在您的情况下是 "road1/"。
- 它在那里找到模块"pato",然后寻找对象"modtest",没有找到,它寻找模块road1/pato/modtest,没有找到,它放弃。
我 运行 遇到了 st运行ge 问题,我找不到答案。
我想使用可能位于不同模块中的具有相同路径名的文件(文件夹也包含空 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 可能包含多个路径,应该没问题,运行 程序只是按顺序浏览它们。然而,在这种情况下,在路径前面添加空路径似乎会阻止读取后面的路径。如果这是预期的行为,很好,我会很感激关于它的好文档的链接。
您有命名空间冲突。
- 根据您的 PYTHONOPATH,当您导入 "pato.modtest" 时,Python 首先查看当前命名空间中是否存在 "pato" 或 "pato.modtest"。
- 因为它们不存在,所以它会转到 sys.path 并尝试第一个路径,在您的情况下是 "road1/"。
- 它在那里找到模块"pato",然后寻找对象"modtest",没有找到,它寻找模块road1/pato/modtest,没有找到,它放弃。