Python模块搜索路径
我有一个这样的项目:
foo/
| main.py
| bar/
| | module1.py
| | module2.py
| | __init__.py
在这个项目中,main.py
文件里有 import bar.module1
,而 module1.py
文件里又有 import module2
。
在 Python 2.6 里这样是可以正常工作的,但在 Python 3.1 里就不行了,出现了 ImportError: No module named module2
的错误。
为什么这个行为会改变呢?我该怎么恢复它呢?
1 个回答
6
在module1.py文件中,你可以写:from . import module2
main.py
import bar.module1
print(bar.module1.module2.thing)
bar/init.py
#
bar/module1.py
#import module2 # fails in python31
from . import module2 # intrapackage reference, works in python26 and python31
bar/module2.py
thing = "blah"
至于为什么或者怎么做,这个问题我就不太清楚了。文档里似乎也没有解释得很清楚。也许在Python 3中,他们决定强制要求在包内引用子模块时,必须使用这种内部引用的方式?