Как правильно запустить приложение Flask из командной строки? - PullRequest
0 голосов
/ 08 апреля 2020

Я создал свое первое приложение Flask и столкнулся с проблемой, которую я хочу запустить приложение из командной строки. Я реализовал приложение, используя BluePrints в структуре в конце вопроса.

Запуск из Visual Code работает нормально, но когда я пытаюсь запустить приложение из командной строки, я получаю ошибки ..

run using: (-> in src/koboscraper)
$ export FLASK_APP=app
$ flask run
$ 

Error: While importing "koboscraper.app", an ImportError was raised:
ModuleNotFoundError: No module named 'config'
- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;

run using: (-> in src/koboscraper)
$ python -m app.py

Error: from koboscraper import create_app
ModuleNotFoundError: No module named 'koboscraper'
file: src/koboscraper/__init__.py (some code removed!!)

from flask import Flask

def create_app():
    app = Flask(__name__)

    app.logger.info(f'Loading environment set to: {app.config["ENV"]}')

    environment = app.config["ENV"]
    if environment == "production":
        app.config.from_object("config.ProductionConfig")
    elif environment == "development":
        app.config.from_object("config.DevelopmentConfig")
    elif environment == "test":
        app.config.from_object("config.TestConfig")
    else:
        os._exit(0)

    register_extensions(app)


    return app
file: src/koboscraper/app.py

from koboscraper import create_app

import logging
import os

app = create_app()

if __name__ == '__main__':
    app_port = os.getenv('APP_PORT', 8080)
    app.run(host='0.0.0.0', port=app_port)

Folderstructure
.
└── src
    └── koboscraper
        ├── __init__.py
        ├── api
        │   └── api_routes.py
        ├── app.py
        ├── config.py
        ├── extensions.py
        ├── views
        │   ├── static
        │   ├── templates
        │   └── view_routes.py

1 Ответ

0 голосов
/ 08 апреля 2020

Я не копировал ваши настройки и не проверял приведенный ниже код, но если ваше приложение не установлено как пакет, вам нужно добавить его местоположение в sys.path:

# file: src/koboscraper/app.py

# inserted code
import os.path
import sys

basedir = os.path.dirname(os.path.abspath(__file__))
if basedir not in sys.path:
    sys.path.insert(1, basedir)

# original code
from koboscraper import create_app
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...