Python 3.8 错误
ImportError: cannot import name 'mydb' from partially initialized module 'connection'
(most likely due to a circular import) (C:\U
sers\Mark04\Documents\Python tutorial\databasing\connection.py)
当我试图执行子模块 select.py
import bcrypt;
from connection import mydb
有一个导入的模块 connection.py
import mysql.connector
mydb = "Success";
我不知道是什么问题。当我从我的模块 connection.py 中删除 import mysql.connector 时,错误没有出现,但它没有解决我的问题。
> python -m select
原文由 Mark Anthony Libres 发布,翻译遵循 CC BY-SA 4.0 许可协议
要回答上面的问题,我们需要了解循环依赖的问题。
为了理解循环依赖,我想在你面前布置一个简单的例子。
我认为每个应用程序都需要具有以下几个基本块:
我们的简单示例也将包含三个文件
app.py 文件的内容如下所示:
models.py 文件的内容如下所示:
controllers.py 文件的内容如下所示:
我想现在,我已经列出了我们应用程序的图表,现在让我们继续了解该应用程序的工作原理。
app.py
开始app
app.py
文件中的变量在内存中创建。db
变量app.py
在内存中创建。controllers.py
文件导入auth
--- 文件,我们切换到 ```controllers.py`` 文件Blueprint
。User
,我们切换到models.py
文件。models.py
文件中导入db
(我们能够导入它,因为它是在步骤 3 中创建的)上面序列中最重要的导入步骤是
step 7
,因为它会在我们的应用程序中导致循环依赖的问题,一会儿。现在我们将尝试更改
app.py
文件来引入循环依赖的问题。现在,作为开发人员,我们可能会认为我们所有的导入都应该放在文件的顶部,这不是让您的代码更干净吗?是的当然!它确实使代码更清晰。
现在,我们的应用程序存在循环依赖问题。让我告诉你怎么做?
app.py
文件开始auth_controller
来自controllers.py
文件controllers.py
文件,并处理它。models.py
要导入的文件User
models.py
文件中,我们从app
导入db
(但数据库尚不存在。)现在,我想你明白了,刚才看到的问题是循环依赖的一个例子。在您的情况下,同样的问题导致
ImportError
。解决方案是检查
import statements
并将它们放在正确的位置。有时,我们使用代码格式化程序,它会重构顶部的所有导入语句。这可能是您遇到问题的原因。我希望这可以回答你的问题!