【问题标题】:Can't figure out how to solve this circular import [closed]无法弄清楚如何解决这个循环导入[关闭]
【发布时间】:2020-01-09 08:14:34
【问题描述】:

我将一些函数拆分为一个单独的文件。找到函数和辅助函数。设置所有路径并导入其他文件,以便在必要时仍然可以调用所有内容。但是在从原始文件中删除未使用的导入后,它似乎会出现循环导入错误。

所以有一个未使用的导入,并且在那里,每个测试 (524) 都成功,但由于未使用的导入,无法推送分支。如果我们删除导入,我认为测试会进入循环导入并且根本不会开始。

我尝试的第一件事是将有关导入语句从: from /module import /object --> import module

这使测试开始,但之后一切都出错了。

在那之后,我试图找到一种通过循环导入路径的方法,但我忘记了一切,甚至不知道这是否是一个解决方案。

`

Traceback (most recent call last):
    File "/home/user/../.py", line 2, in <module>
    from x.model import x
    File "/home/user/../.py", line 1, in <module>
    import A
    File "/home/user/../.py", line 4, in <module>
    import B
    File "/home/user/../.py", line 1, in <module>
    import C
    File "/home/user/../.py", line 9, in <module>
    import D
    File "/home/user/../.py", line 4, in <module>
    import E
    File "/home/user/../.py", line 9, in <module>
    from x.model import x
ImportError: cannot import name 'x'
`

【问题讨论】:

  • 很难帮助您,因为您的问题中没有任何代码。
  • 此外,如果您将其更改为import module,您可能需要附加module.object,而不是直接使用object。您也可以通过尝试组织该模块并使用 __init__ 文件来解决此问题,以便轻松导入其内容并且用户不会陷入循环导入
  • 如果不需要对象,为什么还要导入模块?

标签: python-3.x django-rest-framework python-3.6


【解决方案1】:

如果您在/home/user/projects/.../nsx/utils.py 文件中使用导入的Ive,在某个方法或函数中,那么您应该从文件导入语句的顶部删除导入语句(即from ive.models import Ive)(如果您这样做的话),并且动态导入意味着将导入语句放在方法或函数内部使用Ive的位置。

# Assume `/home/user/projects/.../nsx/utils.py` file

# Don't import Ive here
# from ive.models import Ive

def func():
     # import here
    from ive.models import Ive
    # use Ive here


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多