Python模块搜索路径

Sch*_*ron 3 python module path

我有一个这样的项目:

foo/
| main.py
| bar/
| | module1.py
| | module2.py
| | __init__.py
Run Code Online (Sandbox Code Playgroud)

用main.py做import bar.module1和module1.py做import module2.

这可以使用python 2.6但不能使用python 3.1(ImportError: No module named module2)

为什么行为改变了?如何恢复?

Nic*_*k T 6

在module1.py中,执行以下操作: from . import module2

main.py

import bar.module1
print(bar.module1.module2.thing)
Run Code Online (Sandbox Code Playgroud)

bar/init .py

#
Run Code Online (Sandbox Code Playgroud)

酒吧/ module1.py

#import module2 # fails in python31
from . import module2 # intrapackage reference, works in python26 and python31
Run Code Online (Sandbox Code Playgroud)

酒吧/ module2.py

thing = "blah"
Run Code Online (Sandbox Code Playgroud)

至于为什么/如何,这高于我的薪水.文档似乎没有阐明它.也许在Python 3中,他们决定在使用intrapackage样式显式导入的包中强制执行子模块?

  • 同样在[Python 3.0中的新功能](http://docs.python.org/release/3.0.1/whatsnew/3.0.html)中引用:"相对导入的唯一可接受的语法是来自.[module] import name`.所有不以`.`开头的导入表单都被解释为绝对导入." (3认同)