我的模块结构如下:
/parent
-- __init__.py
-- /child
---- __init__.py
我想在child
中导入parent
,反之亦然,即:
/ parent / init .py:
import child
/ parent / child / init .py:
import parent
但是当我这样做的时候我得到了错误No module named 'parent' in parent/child/__init__.py
答案 0 :(得分:0)
由于代码中模块的循环依赖性,您遇到了该错误。
当python尝试初始化parent
模块时,它会看到import child
语句,该语句将解释器引导至child
模块,(请注意,parent
模块未初始化现在)在子模块import parent
中遇到了行,但是由于父模块尚未初始化,解释器将因找不到parent
模块的错误而失败。
理想情况下,您应该修复循环导入以解决此问题,但是可以克服将导入移至后期而不是将其添加到文件顶部的问题。 (例如:您可以在实际使用子模块的方法中添加import语句。)但不建议这样做。
答案 1 :(得分:0)
在将其导入子级之前添加父级路径,这样可以找到父级模块
sys.path.append(os.path.abspath('..'))
答案 2 :(得分:0)
圆形进口问题可能表明设计不良
您的进口商品不能同时处于顶级水平。
# /parent/child/init.py:
import parent # <-- top level
# /parent/init.py:
import .child # <-- also top level
常用模式是将其中一个导入移动到使用它的位置(但不在顶层,lul),例如:
# /parent/child/init.py:
def dupa():
import parent # <-- not top level
parent.foo()