从兄弟包中导入模块,绝对导入

时间:2014-03-24 20:24:46

标签: python python-3.x python-import

如何使用兄弟包模块中的绝对导入?

包文件结构:

.
├── 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。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

__init__.py中的任何内容都需要.

答案 1 :(得分:0)

使用python -ma.modulea

正在运行python a/modulea.pya目录添加到sys.path而不是父目录(.)。

不要直接从Python包中运行脚本。请参阅Traps for the Unwary