Flask: app_context () ведет себя по-разному для разных импортов - PullRequest
0 голосов
/ 05 марта 2020

Я разрабатываю приложение с моделью машинного обучения для прогнозирования цены автомобиля с учетом заданного c набора функций.

В этом руководстве автор заявляет, что:

Любая часть нашего приложения, которая не импортирована, не инициализирована и не зарегистрирована в файле app.app_context ( ): блок фактически не существует.

И импортирует маршруты в app_context ():

def create_app():
    ...

    with app.app_context():
        # Include our Routes
        from . import routes

В моем файле init.py мне нужно импортировать и инициализировать MLModelConfigs внутри app_context, потому что в противном случае он вызывает RuntimeError: Working outside of application context.

Однако я могу импортировать routes за пределами app_context, и он все еще работает.

Почему существует другое поведение?

Мой случай:

У меня следующая структура:

├── webapp
├── car_prices.py
├── congif.py #paths         
│   ├── app        
│       ├── static
│       ├── templates
│       ├── routes.py
│       ├── utils.py
│       ├── models.py
│       ├── __init__.py

'car_prices.py':

from app import app

' init .py'

from flask import Flask
from config import Config

app = Flask(__name__)
app.config.from_object(Config)

with app.app_context():
     from app.models import MLModelConfigs
     model_config = MLModelConfigs

from app import routes

'models.py'

from .utils import process_features, load_freshest_model
from flask import current_app


 class MLModelConfigs:
      __tablename__ = 'MLmodelConfigs'
      model = load_freshest_model(current_app.config['PATH_MODELS'])
      features_info, option_values = process_features(current_app.config['PATH_FEATURES_INFO'])

Вопросы:
1. Почему работает импорт маршрутов вне app_context ()?
2. Почему импорт и инициализация MLModelConfigs вне app_context вызывает RuntimeError: Working outside of application context.

´

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