FLASK: plotly: ошибка: модуль 'index' не имеет атрибута 'app.server' - PullRequest
0 голосов
/ 01 ноября 2019

контекст

Я отлаживаю приложение с помощью кода Visual Studio (VSCode).

Точки останова НЕ поражены!

  • Точки останова НЕ поражаются при использовании launch.json (См. [1])

  • Я могу отлаживать с помощью launch.json (см. [2]), но отладчик не останавливается в точке останова!

Я бы хотел, чтобы VSCode останавливался на моих точках останова, когда это необходимо

** Какая правильная конфигурация для launch.json для достижения точек останова? **

Спасибо за потраченное время, помогая мне!

иерархия проекта

  • launch.json
  • index.py См. [4]
  • app.py См. [3]
  • страниц
    • index.py
    • Transactions.py
  • launch.json описывается ниже [1]

проблема: Ошибка: модуль 'index' не имеет атрибута 'app.server '

Сообщение об ошибке отображается после нажатия кнопки «Начать отладку> F5» = Ошибка: модуль «index» не имеет атрибута «app.server»

Я пробовал десятки способов установить "FLASK_APP": "index: app.server" , но они генерируют различные сообщения об ошибках:

  • "FLASK_APP": "index: app.server" генерирует эту ошибку Ошибка: действительное приложение Flask не было получено из "index: app".

  • "FLASK_APP": "index.py" генерирует эту ошибку Ошибка: ошибкаПриложение или фабрика Flask в модуле «index». Используйте "FLASK_APP = index: name, чтобы указать один.

для информации: команда gunicorn (работает)

здесь есть команда, доступная в azure-pipelines.yml runningприложение plotly:

  • gunicorn --bind=0.0.0.0 --timeout 600 index:app.server

вложенные файлы

[1] launch.json - не работает

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "index:app.server",
                "FLASK_ENV": "development",
                "FLASK_DEBUG": "1",
                "FLASK_RUN_PORT": "8052"
            },
            "args": [
                "run",
                "--no-debugger",
                "--no-reload"
            ],
            "jinja": true
        }
    ]
}

[2] launch.json - работает, но точки останова не достигнуты

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${workspaceRoot}\\index.py",
            "console": "integratedTerminal"
        }
    ]
}

[3] webapp.py

# -*- coding: utf-8 -*-
import dash

app = dash.Dash(
    __name__, meta_tags=[{"name": "viewport",
                          "content": "width=device-width, initial-scale=1"}]
)
server = app.server
app.config.suppress_callback_exceptions = True

index.py - корень приложения

# -*- coding: utf-8 -*-
import dash_html_components as html
import dash_core_components as dcc
from webapp import app
from dash.dependencies import Input, Output
from pages import (
    transactions, index)


# Describe the layout/ UI of the app
app.layout = html.Div([
    dcc.Location(id="url", refresh=False),
    html.Div(id="page-content")
])


# Update page
@app.callback(Output("page-content", "children"),
              [Input("url", "pathname")])
def display_page(pathname):
    if pathname == "/dash/index":
        return index.layout
    if pathname == "/dash/transactions":
        return transactions.layout
    else:
        return index.layout


if __name__ == "__main__":
    app.run_server(debug=True, port=8051)

1 Ответ

0 голосов
/ 05 ноября 2019

Ваш пример [1] не работает, потому что вы установили FLASK_APP на index:app.server, который пытается найти атрибут с именем app.server в модуле index. Имена атрибутов не могут иметь точку (вы можете проверить это, импортировав этот модуль и попробовав getattr(index, "app.server")). Вы должны быть в состоянии заставить FLASK_APP просто сказать index, чтобы он работал.

См. Документацию Flask по обнаружению приложений для получения более подробной информации.

...