繁体   English   中英

如何导入导入父模块的子模块?

[英]How to import child module which imports parent module?

我的模块结构如下:

/parent
-- __init__.py
-- /child
---- __init__.py

我想在parent中导入child ,反之亦然,IE:

/父/初始化.py:

import child

/父/子/初始化.py:

import parent

但是当我这样做时,我收到错误No module named 'parent' in parent/child/__init__.py

由于代码中模块的循环依赖性,您会收到该错误。

当 python 尝试初始化您的parent模块时,它会看到import child语句,该语句将解释器引导到child模块,(注意parent模块尚未初始化)现在在子模块中遇到import parent行,但由于父模块尚未初始化,解释器将因找不到parent模块的错误而失败。

理想情况下,您应该修复循环导入来解决此问题,但是可以将导入移到稍后阶段而不是将其添加到文件顶部来克服它。 (例如:您可以在实际使用子模块的方法中添加 import 语句。)但不建议这样做。

在child中导入之前添加父路径,这样可以找到父模块

sys.path.append(os.path.abspath('..'))

不良设计警报

循环进口问题可能表明设计不佳

解决方案

您的导入不能都在顶层。

# /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()

也可以看看

Python循环进口?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM