Создание чертежей в __init__.py - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующая структура приложения

/application
  app.py
  /decorators
    queryAccessory.py
  /auth
    __init__.py
    dao.py
    /controllers
      login.py
      register.py
    /models
      user.py
      get_user_response.py
  /tests
    __init__.py
    dao.py
    /controllers
      get_tests.py
    /models
      test.py
      get_tests_response.py

Чертежи объявляются в init .py файлах пакетов auth и test.

from flask import Blueprint, request

tayyariAuth = Blueprint('tayyariAuth', __name__)
from auth.controllers import register
from auth.controllers import login

ив тестах / init .py as

from flask import Blueprint, request

tayyariTests = Blueprint('tayyariTests', __name__)
from tests.controllers import get_tests

Оба чертежа зарегистрированы в app.py.Проблема в том, что приложение не запускается, когда оба файла init .py имеют импорт в конце.Если я удаляю последние строки импорта из любого 1 из файлов, приложение запускается, и зарегистрированные чертежи работают нормально.Тем не менее, я получаю следующие ошибки, когда импортируются файлы init .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)

Пожалуйста, помогите мне понять, что здесь происходит и как я могу избежать этого.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Проблема была из-за циклического импорта, как правильно указано @ j2logo.Однако проблема была не в том, что decorators.queryAccessor не было на пути к питону.

Первая строка в файле 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 в соответствующие пакеты, а они, в свою очередь, импортировали * 1017.**требуемая переменная сеанса, импортируя db.py прежде всего.Это создало требуемый объект сеанса для файла decorators.queryAccessor, и я импортировал сеанс из db.py вместо app.py, тем самым нарушив циклический импорт.

0 голосов
/ 19 февраля 2019

Кажется, что модуль 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)
...