Ada*_*amA 5 python plotly-dash
我正在尝试从 jupyter notebook 运行以下代码:
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)
Run Code Online (Sandbox Code Playgroud)
它产生以下内容:
* 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.
Run Code Online (Sandbox Code Playgroud)
当我点击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
Run Code Online (Sandbox Code Playgroud)
开箱即用,如上一个答案所述,您不能运行 debug=True。因此人们坚持:
在 jupyter 上,执行以下操作:
if __name__ == '__main__':
app.run_server()
Run Code Online (Sandbox Code Playgroud)
在 VSCode 等编辑器上,您可以执行以下操作:
if __name__ == '__main__':
app.run_server(debug=True)
Run Code Online (Sandbox Code Playgroud)
您仍然热衷于使用 Jupyter 而不是代码编辑器?
该问题的讨论始于这个已解决的Github 问题;在 plotly中突出显示了禁用调试的需要;讨论催生了jupyter-dash作为解决方案。
问题在于:
启用调试模式直接启用重载器。反过来,重新加载器会导致任何 Flask 应用程序在启动时被初始化两次,这是 Jupyter 无法应对的。事实上,你甚至可以在 jupyter 中运行 debug=True ,前提是你禁用了重新加载器。
因此,您可以这样做:
if __name__ == '__main__':
app.run_server(debug=True, use_reloader=False)
Run Code Online (Sandbox Code Playgroud)
您无法在 jupyter 笔记本上以调试模式运行 dash,您必须禁用调试模式或转向良好的老式文本编辑器/IDE:
if __name__ == '__main__':
app.run_server(debug=False)
Run Code Online (Sandbox Code Playgroud)