Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导入python模块中具有main函数的包_Python_Python Import - Fatal编程技术网

导入python模块中具有main函数的包

导入python模块中具有main函数的包,python,python-import,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__) imp

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

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:没有名为p2的模块

我可以根据模块通过更改p1中的导入来解决此问题:

由于主模块的名称始终为“main”,因此 打算用作Python应用程序的主模块的 始终使用绝对进口

我对这句话的理解是,我应该将p1中的导入从包导入p2更改为
。然而,这打破了p1:

ImportError: No module named package

我还发现了其他建议修改sys.path并显式添加文件夹的方法,但我觉得这并不干净。我错过了什么?做这件事的pythonic方法是什么?

试着把
p1
改成
from。导入p2
ValueError:尝试在非包中进行相对导入是您的
包/\uuuu init\uuuuuuuuupy
为空(或它是否存在)?init.py存在于每个文件夹中且为空。