![](/img/trans.png)
[英]How to import a module, which imports another module, from two different folders inside a package
[英]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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.