Plotly Dash应用无本地URL输出且运行行为异常求助
Dash应用运行无本地URL输出、脚本直接终止的问题
问题现象
运行Dash应用时,控制台未输出本地主机URL,脚本直接终止,控制台输出如下:
starting app... <IPython.lib.display.IFrame at 0x238562976a0> In [19]:
预期输出
正常情况下控制台应输出:
Dash is running on http://127.0.0.1:8050/ * Serving Flask app 'app' (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: off * Running on http://127.0.0.1:8050 (Press CTRL+C to quit)
环境版本信息
使用conda环境,相关包版本:
plotly 5.16.1 pypi_0 pypi dash 2.11.1 pypi_0 pypi dash-core-components 2.0.0 pypi_0 pypi dash-html-components 2.0.0 pypi_0 pypi dash-table 5.0.0 pypi_0 pypi python 3.10.9 h966fe2a_2
背景情况
- 最初通过conda forge分别安装plotly和Dash,能正常输出URL,但应用报
ModuleNotFoundError: no module named plotly.io.json错误 - 重建环境后按官方指引用pip安装Dash(plotly随Dash捆绑安装),出现当前问题:浏览器可访问应用,但控制台显示脚本已终止,怀疑应用无法实时更新
应用代码
import plotly.graph_objects as go from dash import Dash, callback, html, dcc, dash_table, Input, Output, State, MATCH, ALL app = Dash(__name__) user_files = list(app_data.keys()) app.layout = html.Div([dcc.Tabs(id = 'user_tabs', value = 'Single metric', vertical = True, children = [dcc.Tab(label = 'Single metric', children=[html.Div([dcc.Dropdown(user_files, user_files[0], id='json_dropdown') ]), html.Div([dcc.Dropdown(id='record_dropdown') ]), html.Div([dcc.Dropdown(id='bgc_dropdown') ]), html.Div([dcc.Dropdown(['vis1', 'vis2', 'vis3', 'vis4'], 'vis1', id='vis_dropdown') ]), html.Div([dcc.Dropdown(mib_values, mib_values[0], id='mib_value') ],id = 'mib_tab_style'), html.Div([dcc.Dropdown(operations, operations[0], id='mib_operation') ],id = 'operation_tab_style'), html.Div([dcc.Graph(id='single_graph')], style = {'width': '50%'}), ])] )]) if __name__ == '__main__': print ('launching app') app.run(debug = False)
解决方法
强制启用外部服务器模式
问题根源是Dash检测到IPython环境后自动启用内嵌IFrame模式,导致脚本不阻塞运行。修改app.run()调用,添加mode="external"参数:if __name__ == '__main__': print ('launching app') app.run(debug=False, mode="external")此设置会让Dash以外部服务器模式运行,控制台将输出正常URL并保持运行,直到按下
Ctrl+C终止。修复依赖冲突
- 执行
pip check检查是否存在依赖版本不兼容问题 - 若仍有plotly相关错误,强制重新安装指定版本:
pip install plotly==5.16.1 --force-reinstall
- 执行
统一包安装方式
避免混合使用conda和pip安装依赖:要么全用conda,要么全用pip。如果选择pip,确保conda环境中没有预装的plotly/Dash包干扰。
内容的提问来源于stack exchange,提问作者Tim Kirkwood
相关产品推荐
相关产品推荐

