我正在尝试重用我在新项目中编写的软件包,而且我目前遇到了导入问题。 我重新创建了一个显示问题的最小示例。文件夹结构如下:
test\
__init__.py
main.py
package\
__init__.py
p1.py
p2.py
问题源于p1导入p2
的事实from __future__ import print_function
print("P1",__name__,__package__)
import p2
def a():
p2.b()
print("A")
if __name__=="__main__":
a()
p2.b()
这是main.py代码:
from __future__ import print_function
print("MAIN",__name__,__package__)
from package.p1 import a
from package.p2 import b
if __name__=="__main__":
a()
b()
这是p2.py:
from __future__ import print_function
print("P2",__name__,__package__)
def b():
print("B")
if __name__=="__main__":
b()
运行main.py时,我得到ImportError: No module named p2
我可以根据模块documentation通过更改p1中的导入来解决此问题:
由于主模块的名称始终为" main ",模块 打算用作Python应用程序的主要模块 总是使用绝对进口。
我对这句话的理解是我应该将p1中的导入更改为from package import p2
。然而这打破了p1:
ImportError: No module named package
我发现其他answers只是建议修改sys.path明确添加文件夹,但这对我来说似乎并不干净。我错过了什么?什么是pythonic方法呢?