在一个Django项目中,我需要从file-1导入class-A到file-2,从file-2导入class-B到file-1。
这些类有它们独特的方法,我想在另一个文件中使用这些方法(如上面的描述)。
我正在使用:
Python 3.8.10(在虚拟环境中)
Windows 10 - 64位(最新版本)
Django 4.0.4
当我运行python manage.py runserver
时,我看到以下错误:
第一个
当我在ea_utils.py
和login_request_based.py
文件中添加以下类时,我得到了错误ImportError: cannot import name 'full_request' from partially initialized module 'ea_app.login_request_based' (most likely due to a circular import)...
**.**但当我注解掉其中一个时,问题得到了解决,内置的Web服务器成功启动。
F:\my_ea_proj\ea_proj\ea_app\all_utils\ea_utils.py:
from ea_app.login_request_based import full_request
F:\my_ea_proj\ea_proj\ea_app\login_request_based.py
from ea_app.all_utils.ea_utils import ea_utils_class
如何解决此问题?
谢谢您@mohamed-beltagy.但是您评论/链接没有解决我问题请阅读下面注解
What happens when using mutual or circular (cyclic) imports in Python?
如果你导入foo(在www.example.com中bar.py)和import bar(在www.example.com中foo.py),它会运行得很好。当任何东西实际运行时,这两个模块都将被完全加载,并将有对彼此的引用。
问题是当你从foo导入abc(在www.example.com内bar.py)和从bar导入xyz(在www.example.com内foo.py)时,因为现在每个模块都要求另一个模块在导入之前已经导入(这样我们导入的名称就存在了)。
注意,如果您执行from foo import * 和from bar import *,则在foo中执行的所有操作都处于bar的初始化阶段,并且bar中的实际函数尚未定义...
3条答案
按热度按时间rur96b6h1#
我在使用以下文件结构时遇到了同样的问题:
在
models.init
中,我有一个来自app_2
的示例,如下所示在我的
app_1
模块中,我有这些导入:在我的
app_2
模块中,我有这些导入:我尝试了几种解决方法,但是没有一种对我有效,但是我能够摆脱这个错误,并且使
models.init
中的所有类和示例都能正常工作。这是我得到的最终解决方案。models.init
没有任何变化,因为我需要访问它。app_2
也没有任何变化。在我的
app_1
模块中,我修改为:希望这对你有用。
fykwrbwg2#
我遇到了一个非常相似的问题,讽刺的是,我把需要导入的类分离到一个单独的模型文件(models_3.py)中,从那里导入对我来说是有效的,我仍然不知道为什么会发生这种情况,因为我有其他的模型。它们是这样工作的,但似乎有特定的情况。
旧结构:
新结构:
uqcuzwp83#
如果在其中一个模块中导入模型只是为了与之建立关系,例如:
您可以执行此操作,因此删除开头的
import
: