我对导入模块时的优先级感到困惑以及如何更改它。
当前目录包含:
l10n/__init__.py
l10n/moneyfmt.py
带有额外包的另一个目录(与当前目录不同)确实包含:
/opt/l10n/__init__.py
/opt/l10n/utils.py
现在运行 python 交互式解释器:
>>> import sys
>>> sys.path
['', '/usr/lib/python27.zip', '/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload',
'/usr/lib/python2.7/site-packages', '/usr/lib/python2.7/site-packages/PIL',
'/usr/lib/python2.7/site-packages/gtk-2.0',
'/usr/lib/python2.7/site-packages/setuptools-0.6c11.egg-info']
>>> import l10n.utils
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named utils # CORRECT, NOT IN PATH YET
>>> sys.path.insert(0, '/opt')
>>> sys.path
['/opt', '', '/usr/lib/python27.zip', '/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload',
'/usr/lib/python2.7/site-packages',
'/usr/lib/python2.7/site-packages/PIL',
'/usr/lib/python2.7/site-packages/gtk-2.0',
'/usr/lib/python2.7/site-packages/setuptools-0.6c11.egg-info']
>>> import l10n.utils
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named utils # WHY IT CAN NOT FIND THE MODULE?
为什么我在 sys.path 中添加了搜索路径的完整路径后找不到包含 l10n.utils 模块的包?当前目录是否总是优先?可以更改吗?
最佳答案
您有两个名为 l10n
的模块。第一次尝试import l10n.utils
,错误l10n
正在路上。我怀疑这是错误的l10n
正在被 Python shell 缓存,并且当您尝试 import l10n.utils
时会被查询。第二次(无论您对 sys.path
进行了怎样的更改)。
尝试重新启动 Python shell,更改 sys.path
作为第一件事,做 import l10n.utils
马上。
关于python - 导入优先级一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178264/