导入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存在于每个文件夹中且为空。