我具有以下应用程序结构
from flask import Blueprint, request
tayyariAuth = Blueprint('tayyariAuth', __name__)
from auth.controllers import register
from auth.controllers import login
蓝图在auth和tests程序包的 init .py文件中声明。
from flask import Blueprint, request
tayyariTests = Blueprint('tayyariTests', __name__)
from tests.controllers import get_tests
并在测试中/ 初始化 .py为
File "app.py", line 8, in <module>
from auth import tayyariAuth
File "/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/auth/__init__.py", line 5, in <module>
from auth.controllers import register
File "/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/auth/controllers/register.py", line 1, in <module>
from auth import tayyariAuth, dao
File "/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/auth/dao.py", line 1, in <module>
from decorators.queryAccessor import Query
File "/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/decorators/queryAccessor.py", line 1, in <module>
from app import session
File "/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/app.py", line 9, in <module>
from tests import tayyariTests
File "/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/tests/__init__.py", line 5, in <module>
from tests.controllers import get_tests
File "/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/tests/controllers/get_tests.py", line 1, in <module>
from tests import tayyariTests, request, dao, TayyariEncoder
File "/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/tests/dao.py", line 1, in <module>
from decorators.queryAccessor import Query
ImportError: cannot import name 'Query' from 'decorators.queryAccessor' (/Users/anuragjoshi/Work/Tayyari/tayyari/tayyari-rest/decorators/queryAccessor.py)
两个蓝图都已在app.py中注册。 问题在于,两个 init .py文件最后都导入时,应用程序无法启动。 如果我从任何一个文件中删除了最后一个导入行,则该应用程序将启动,并且已注册的蓝图也可以正常工作。但是,在两个 init .py文件
中都存在导入时,出现以下错误names_tok = [TaggedDocument(words=word_tokenize(name.lower()), tags=[str(i)])
for (i, name) in enumerate(names)]
# train model
max_epochs = 50
vec_size = 50
alpha = 0.025
model = Doc2Vec(size=vec_size,
alpha=alpha,
min_alpha=0.00025,
min_count=1,
dm=1)
请帮助我了解这里的情况以及如何避免这种情况。
谢谢。
答案 0 :(得分:0)
似乎模块decorators.queryAccessor
不在您的python路径中。
您如何导入这些蓝图?我通常有一种工厂方法来创建应用程序。在此方法中,我具有避免循环引用的导入,如下所示:
def create_app():
# Your code here
...
from auth import tayyariAuth
app.register_blueprint(tayyariAuth)
from tests import tayyariTests
app.register_blueprint(tayyariTests)
答案 1 :(得分:0)
问题是由于@ j2logo正确指出的循环导入。但是,问题不是decorators.queryAccessor
不在python路径上。
decorators.queryAccessor
文件中的第一行是
from app import session
在app.py
内部,我正在导入包含我的蓝图的软件包的导入。
from auth import tayyariAuth
from tests import test_blueprint
上面的问题中给出了这些程序包中的 init .py文件。由于这些 init .py文件末尾的导入,因此正在导入login,register和get_tests模块,这些模块依次将dao.py
模块导入各自的包中,并依次导入导入的decorators.queryAccessor
。
所以循环路径是
app.py -> auth -> auth/controllers/login.py -> auth/dao.py -> decorators.queryAccessor -> app.py
为解决这个问题,我提出了将逻辑初始化为与app.py相同级别的另一个文件db.py的逻辑,并通过导入db.py来创建所需的会话变量。
这为decorators.queryAccessor
文件创建了所需的会话对象,我从db.py
而不是app.py
导入了会话,从而中断了循环导入。