Python模块搜索路径

3 投票
1 回答
2178 浏览
提问于 2025-04-16 03:02

我有一个这样的项目:

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中,他们决定强制要求在包内引用子模块时,必须使用这种内部引用的方式?

撰写回答