Python/Plotly-DASH报错:'Dash'对象无'run'属性,求解决方案
问题解决:Dash应用启动报错及代码优化
1. 启动报错的直接修复
你遇到的AttributeError: 'Dash' object has no attribute 'run'是因为启动语句写错了:
原错误代码:
app.run.server(debug=True)
根据你的Dash版本选择正确写法:
- 若使用Dash 2.0之前版本,用:
app.run_server(debug=True, port=8050) - 若使用Dash 2.0及以后版本,可简化为:
app.run(debug=True, port=8050)
2. 代码中的其他关键问题
(1)函数返回值错误
你的species_tree()和gene_tree()函数都返回了函数自身(比如return species_tree),这会导致dcc.Graph的figure参数拿到的是函数对象,而非它需要的Plotly Figure对象。必须修改函数,让它返回可视化所需的Figure实例:
举个进化树可视化的简化示例:
def species_tree(): from ete3 import Tree import plotly.graph_objects as go # 读取newick格式的进化树文件 tree = Tree("你的物种树文件路径.newick") # 这里需根据树结构提取节点、关系,构建Plotly支持的可视化数据 # 示例用Treemap替代,实际可使用更适配进化树的可视化类型 fig = go.Figure(go.Treemap( labels=["物种A", "物种B", "物种C"], parents=["", "物种A", "物种A"] )) return fig
(2)回调代码格式问题
你注释的回调代码格式错误,若需要动态更新图表,正确的Dash回调写法应为:
from dash import Input, Output, callback @callback( Output("species-tree", "figure"), Input("你的输入组件ID", "value") # 替换为实际的输入组件 ) def update_species_tree(input_value): # 根据输入值返回更新后的Figure return species_tree()
3. 修正后的完整代码框架示例
from dash import Dash, html, dcc from ete3 import Tree import plotly.graph_objects as go def main(): # 提取OG代码的逻辑 return "示例OG编号" def gene_tree(OG, search_path): # 读取基因树文件并返回Plotly Figure tree = Tree(f"{search_path}/{OG}.newick") # 完善基因树的可视化逻辑 fig = go.Figure(go.Treemap(...)) return fig def species_tree(): # 读取物种树文件并返回Plotly Figure tree = Tree("物种树文件路径.newick") # 完善物种树的可视化逻辑 fig = go.Figure(go.Treemap(...)) return fig app = Dash(__name__) app.layout = html.Div(children=[ html.H1(children="My APP", style={"textAlign": "center"}), html.Div(children="基因树与直系同源组可视化"), dcc.Graph(id="species-tree", figure=species_tree()) ]) if __name__ == "__main__": # 根据Dash版本选择启动方式 app.run_server(debug=True, port=8050) # 或 app.run(debug=True, port=8050)
内容的提问来源于stack exchange,提问作者gforg34
相关产品推荐
相关产品推荐

