导入包含主函数

时间:2018-02-13 22:50:00

标签: python python-import

我正在尝试重用我在新项目中编写的软件包,而且我目前遇到了导入问题。 我重新创建了一个显示问题的最小示例。文件夹结构如下:

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方法呢?

0 个答案:

没有答案