Как заставить руководство пакета Flask работать с Poetry?

Я использую Poetry для управления своим проектом Python (зависимости, пакеты и т. д.) и пытаюсь реализовать четырехстрочный приветственный мир из документации Flask: https://flask.palletsprojects.com/en/1.1.x/patterns/packages/#simple-packages

Моя структура папок выглядит так:

myproject/
  .venv/
  myproject/
    __init__.py
    views.py
  poetry.lock
  pyproject.toml
  README.rst

Два файла init.py:

import myproject.views
__version__ = '0.1.0'

from flask import Flask
app = Flask(__name__)

И views.py:

from myproject import app

@app.route('/')
def index():
    return 'hello world'

Тем не менее, когда я запускаю экспорт FLASK_APP=myproject и FLASK_ENV=development и делаю flask run, и указываю свой браузер на порт, он говорит

flask.cli.NoAppException
flask.cli.NoAppException: While importing "myproject", an ImportError was raised:

Traceback (most recent call last):
  File "/myproject/.venv/lib/python3.9/site-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  File "/myproject/myproject/__init__.py", line 1, in <module>
    import myproject.views
  File "/myproject/myproject/views.py", line 1, in <module>
    from myproject import app
ImportError: cannot import name 'app' from partially initialized module 'myproject' (most likely due to a circular import) (/myproject/myproject/__init__.py)

Как я могу это исправить? Я хотел бы использовать рекомендуемый шаблон.


person Villahousut    schedule 09.05.2021    source источник
comment
попробуйте сначала запустить poetry shell. что касается циклического импорта, на странице, на которую вы ссылаетесь, есть примечание.   -  person Capi Etheriel    schedule 09.05.2021
comment
У меня есть, я делаю все это в виртуальной среде   -  person Villahousut    schedule 09.05.2021


Ответы (2)


Я полагаю, что ваша проблема возникает из-за импорта представлений вверху __init__.py. Попробуйте переместить оператор импорта в конец файла, как это делается в руководстве.

person Capi Etheriel    schedule 09.05.2021
comment
Спасибо. Расширение vscode python не позволит. Он автоматически перемещает его наверх... Почему? - person Villahousut; 09.05.2021

В терминале введите poetry run flask run.

person César Vigário    schedule 30.06.2021
comment
Это неправильно. предыдущий ответ был правильным - person Villahousut; 01.07.2021