如何使用兄弟包模块中的绝对导入?
包文件结构:
.
├── a
│ ├── __init__.py
│ └── modulea.py
├── b
│ ├── __init__.py
│ ├── moduleb.py
├── __init__.py
└── test.py
文件test.py和/ modulea.py:
from b.moduleb import f
if __name__ == '__main__':
f()
文件b / moduleb.py:
def f():
print('hello')
这有效:
% python test.py
hello
这不是:
% python a/modulea.py
Traceback (most recent call last):
File "a/modulea.py", line 1, in <module>
from b.moduleb import f
ImportError: No module named 'b'
据我所知,从文档中可以看出它应该有效:http://docs.python.org/3.3/tutorial/modules.html#intra-package-references。我错过了什么吗?
答案 0 :(得分:1)
__init__.py
中的任何内容都需要.
。
答案 1 :(得分:0)
使用python -ma.modulea
。
正在运行python a/modulea.py
将a
目录添加到sys.path
而不是父目录(.
)。
不要直接从Python包中运行脚本。请参阅Traps for the Unwary。