python - ImportError:无法从“模块”导入名称“变量”
问题描述
我将 Flask 用于我的 Web 框架。我遇到了进口问题。我不明白为什么我在我的声明中不能导入我的变量my_app/__init__.py
:
from flask import Flask
from flask_login import LoginManager
from my_app.some_module.my_class.py import auth
app = Flask(__name__)
login_manager = LoginManager()
class Config:
def __init__(self):
pass
config = Config()
我的冲突进口存在于my_app/some_module/my_class.py
:
from flask import Blueprint
from my_app import login_manager # this one works fine
from my_app import config
auth = Blueprint('auth', __name__)
我运行应用程序run.py
:
from my_app import app
app.run(debug=True)
然后我得到错误:
Traceback (most recent call last):
...
File ".../my_app/some_module/my_class.py", line 1, in <module>
from my_app import login_manager, config
ImportError: cannot import name 'config' from 'my_app' (.../my_app/__init__.py)
项目结构为:
my_app
+ __init__.py
some_module
+ __init__.py
+ my_class.py
+ run.py
解决方案
你有一个循环导入:my_app.some_module
-> my_app.some_module.my_class
-> my_app.some_module
。
您可以通过将Config
和config
移至单独的模块来解决此问题my_app.some_module.config
。
# my_app.some_module.my_config
class Config:
pass
config = Config()
# my_app.some_module.my_class
from .my_config import config
# my_app.some_module.__init__
from .my_config import config
from .my_class import MyClass
这意味着每次导入都不依赖于先前的导入:
my_app.some_module
|-> my_app.some_module.my_class -> my_app.some_module.config
\-> my_app.some_module.my_config
以这种方式进行导入而不是将导入移动.my_class
到末尾__init__.py
更健壮。您可以自由地重新排序文件的导入.my_class
和.my_config
文件的顶部。
推荐阅读
- python - 加快对 requests.post() 的调用
- mysql - Mysql如何获取与其他列组合的列
- javascript - 迭代中的自定义元素需要 Vue.js 中的“v-bind:key”指令
- pytorch - Pytorch 中的按位运算
- powershell - Powershell 管道 foreach-object 变量为空
- c# - HttpClient 异步安全吗?
- kubernetes - kubectl exec -ti POD_NAME bash 很快就烦人地退出了
- javascript - 一次只有一个按钮处于活动状态,具体取决于状态
- maven - withMaven UNSTABLE 构建结果未保存在 Jenkins 声明性管道中
- javascript - ENOENT:没有这样的文件或目录 preview.vue、prismic 模块和 nuxt-i18n