一尘不染

Python中的循环导入依赖

python

假设我具有以下目录结构:

a\
    __init__.py
    b\
        __init__.py
        c\
            __init__.py
            c_file.py
        d\
            __init__.py
            d_file.py

a软件包的中__init__.py,将c导入软件包。但是c_file.py进口a.b.d

程序失败,表示尝试导入b时不存在。(它实际上不存在,因为我们正在导入它。)`c_file.pya.b.d

`如何解决这个问题?


阅读 383

收藏
2020-02-20

共2个答案

一尘不染

如果a取决于c,而c取决于a,那么它们实际上不是同一单位吗?

您应该真正检查一下为什么将a和c拆分为两个包,因为您应该将一些代码拆分为另一个包(以使它们都依赖于该新包,而不是彼此依赖),或者应该合并它们一包

2020-02-20
一尘不染

你可以推迟导入,例如a/__init__.py

def my_function():
    from a.b.c import Blah
    return Blah()

也就是说,将导入推迟到真正需要之前。但是,我还将仔细查看我的程序包定义/用法,因为像所指出的那样循环依赖可能表示设计问题。

2020-02-20