Приложение Plotly Dash не запущено

Я пытаюсь запустить следующий код из записной книжки jupyter:

import dash
import dash_core_components as dcc
import dash_html_components as html

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div(children=[
    html.H1(children='Hello Dash'),

    html.Div(children='''
        Dash: A web application framework for Python.
    '''),

    dcc.Graph(
        id='example-graph',
        figure={
            'data': [
                {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
                {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
            ],
            'layout': {
                'title': 'Dash Data Visualization'
            }
        }
    )
])

if __name__ == '__main__':
    app.run_server(debug=True)

Это дает следующее:

 * Serving Flask app "__main__" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:8050/ (Press CTRL+C to quit)
 * Restarting with stat
An exception has occurred, use %tb to see the full traceback.

SystemExit: 1


//anaconda3/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3333: UserWarning:

To exit: use 'exit', 'quit', or Ctrl-D.

Когда я нажимаю http://127.0.0.1:8050/, страница никогда не загружается. Я пробовал это уже некоторое время. Что-то не хватает в ответе? Это должно быть простое приложение для тире.

Вот трассировка:

---------------------------------------------------------------------------
SystemExit                                Traceback (most recent call last)
<ipython-input-1-b057c246c3cf> in <module>
     29 
     30 if __name__ == '__main__':
---> 31     app.run_server(debug=True)
     32 
     33 get_ipython().run_line_magic('tb', '')

//anaconda3/lib/python3.7/site-packages/dash/dash.py in run_server(self, port, debug, **flask_run_options)
    566                    debug=False,
    567                    **flask_run_options):
--> 568         self.server.run(port=port, debug=debug, **flask_run_options)

//anaconda3/lib/python3.7/site-packages/flask/app.py in run(self, host, port, debug, load_dotenv, **options)
    988 
    989         try:
--> 990             run_simple(host, port, self, **options)
    991         finally:
    992             # reset the first request information if the development server

//anaconda3/lib/python3.7/site-packages/werkzeug/serving.py in run_simple(hostname, port, application, use_reloader, use_debugger, use_evalex, extra_files, reloader_interval, reloader_type, threaded, processes, request_handler, static_files, passthrough_errors, ssl_context)
   1005         from ._reloader import run_with_reloader
   1006 
-> 1007         run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
   1008     else:
   1009         inner()

//anaconda3/lib/python3.7/site-packages/werkzeug/_reloader.py in run_with_reloader(main_func, extra_files, interval, reloader_type)
    330             reloader.run()
    331         else:
--> 332             sys.exit(reloader.restart_with_reloader())
    333     except KeyboardInterrupt:
    334         pass

SystemExit: 1

person AdamA    schedule 04.01.2020    source источник
comment
Отслеживание было бы полезно.   -  person Seb    schedule 04.01.2020
comment
попробуйте это в vscode или в другом ide, он будет работать, у него проблема с Jupyter notebbok. Я пробовал с кодом vs, с фрагментом кода проблем нет.   -  person Vikas Sharma    schedule 04.01.2020
comment
@Seb редактирует OP, чтобы показать% tb   -  person AdamA    schedule 04.01.2020


Ответы (2)


Из коробки, как было сказано в предыдущем ответе, вы не можете запустить debug = True. Следовательно, люди придерживаются:

На jupyter выполните:

if __name__ == '__main__':
    app.run_server()

в редакторе, таком как VSCode, вы можете:

if __name__ == '__main__':
    app.run_server(debug=True)

Вы все еще хотите использовать Jupyter вместо редактора кода?
Обсуждение проблемы началось с этого решенного проблема с Github; необходимость отключения отладки была подчеркнута здесь, в сюжетно; и обсуждение привело к появлению jupyter-dash в качестве решения.

Проблема в том, что:
Включение режима отладки напрямую включает перезагрузчик. В свою очередь, перезагрузчик вызовет инициализацию любого приложения Flask дважды при запуске, с этим Jupyter не может справиться. Фактически, вы даже можете запустить debug = True в jupyter, если отключите перезагрузчик.

Таким образом, вы можете:

if __name__ == '__main__':
    app.run_server(debug=True, use_reloader=False)
person I.Ewetoye    schedule 04.01.2020
comment
Спасибо @ I.Ewetoye, я проверю их виджет. Вопрос к вам - почему вы думаете / чувствуете, что редактор кода лучше Jupyter? Что мне не хватает? - person AdamA; 04.01.2020
comment
Я отредактировал решение, чтобы включить краткое объяснение - person I.Ewetoye; 04.01.2020

Вы не можете запустить dash в режиме отладки на ноутбуке jupyter, вам придется отключить режим отладки или перейти в старый добрый текстовый редактор / IDE:

if __name__ == '__main__':
    app.run_server(debug=False)
person Jay Mody    schedule 04.01.2020
comment
Разве jupyter не является IDE? - person AdamA; 04.01.2020
comment
Блокноты Jupyter - это просто способ редактировать и запускать блокноты ipython. С другой стороны, я бы определенно сказал, что Jupyter lab - это IDE. Однако это не влияет на тот факт, что файл .ipynb не совпадает с исходным кодом. Чтобы запустить режим отладки, фактический файл, который запускает приложение, должен быть в виде обычного текста, чего не является .ipynb. - person Jay Mody; 04.01.2020