我正在将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
答案 0 :(得分:0)
问题是您具有循环依赖性。在您从auth
导入my_app.some_module.my_class.py
时,您的config
尚未设置。尝试将导入内容移至my_app/__init__.py
文件的末尾,例如:
from flask import Flask
from flask_login import LoginManager
app = Flask(__name__)
login_manager = LoginManager()
class Config:
pass
config = Config()
from my_app.some_module.my_class.py import auth
答案 1 :(得分:0)
您有一个循环导入: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
的导入。