我的项目存在以下问题,请帮帮我!这是我的包裹的结构:
/pkg
/pkg/__init__.py
/pkg/sub1/__init__.py
/pkg/sub2/__init__.py
/pkg/sub1/foo1.py
/pkg/sub2/foo2.py
这是foo1.py的实现:
from ..sub2 import foo2
def f():
print("Hello!")
当我运行foo1时,出现错误: ValueError:尝试了相对于顶级程序包的相对导入。
我可以通过以下调整来解决它:
import sys
import os
sys.path.append(os.path.abspath(os.path.pardir))
from sub2 import foo2
def f():
print("Hello!")
但是我想知道是否有一种方法可以不导入sys并在其中添加父目录。
我听说,例如,如果我有.py文件'/pkg/start.py',该文件调用了我的foo1模块,那么两个点将起作用。但是,有什么方法可以直接从foo1调用foo2吗?
答案 0 :(得分:2)
在我看来,如果不将pkg添加到我的PATH中,就不可能从sub1的sub2导入模块。这是为什么的解释:
相对导入使用模块的 name 属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何程序包信息(例如,将其设置为“ 主要”),则相对导入的解析就好像该模块是顶级模块一样,无论该模块实际位于何处在文件系统上。