如何在Jupyter Notebook外本地运行Mesa ABM的SolaraViz可视化?
在独立Python脚本中运行Mesa SolaraViz的正确方案
问题概述
使用Mesa 3.2.0在Windows 11的Python 3.13.5环境下,无法在独立脚本中启动SolaraViz的本地Web服务器——Jupyter环境下可正常运行,但官方文档未提供独立脚本的明确指引,尝试多种方法均报错。
前置准备:确保依赖完整
首先安装Mesa的Solara可视化依赖包,避免版本不匹配:
pip install --upgrade mesa[solara]
正确实现方式
方式1:脚本内直接启动Web服务器
修改你的最小可复现脚本,将SolaraViz封装为Solara页面组件,并通过Solara的内部启动函数运行:
import mesa from mesa import Model from mesa.discrete_space import CellAgent, OrthogonalMooreGrid from mesa.visualization import SolaraViz, make_space_component import solara class SimpleAgent(CellAgent): def __init__(self, model, cell): super().__init__(model) self.cell = cell self.wealth = 1 class SimpleModel(Model): def __init__(self, n=10, width=10, height=10): super().__init__() self.grid = OrthogonalMooreGrid((width, height), random=self.random) SimpleAgent.create_agents(self, n, self.random.choices(self.grid.all_cells.cells, k=n)) def agent_portrayal(agent): return {"size": 10, "color": "blue"} model_params = { "n": {"type": "SliderInt", "value": 10, "label": "Agents:", "min": 1, "max": 20} } @solara.component def Page(): # 在此处创建模型和可视化组件 SolaraViz(SimpleModel, components=[make_space_component(agent_portrayal)], model_params=model_params) if __name__ == "__main__": # 启动本地服务器,默认端口8765 solara._main.run(port=8765)
运行脚本后,访问http://localhost:8765即可看到带参数控件的交互式可视化界面。
方式2:使用Solara命令行工具
修改脚本,确保定义Page组件,然后用Solara命令启动:
- 保留脚本中的
Page组件定义(同方式1),去掉if __name__ == "__main__"代码块。 - 在命令行执行:
solara run your_script_name.py
Solara会自动识别脚本中的Page组件,启动服务器并打开浏览器。
错误原因解析
- 方法1报错:
SolaraViz返回的是Solara的Element对象,本身没有run方法,需要通过Solara服务器托管。 - 方法2报错:
solara模块顶层没有run函数,该函数实际在solara._main子模块中。 - 方法3报错:脚本未符合Solara的应用规范(需定义
Page组件或导出page变量),且可能依赖未安装完整。 - 方法4报错:
solara.server模块没有run方法,正确的服务器启动方式是使用Solara内置的启动函数或uvicorn直接运行Solara的app实例。
内容的提问来源于stack exchange,提问作者foobar
相关产品推荐
相关产品推荐

