ImportError:无法从“模块”导入名称“变量”

时间:2018-11-15 17:01:45

标签: python

我正在将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

2 个答案:

答案 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

您可以通过将Configconfig移动到单独的模块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的导入。