使用PySB建模时Cython报错:undeclared name not builtin: m
PySB + Cython 加速报错排查方案
关键排查步骤
- 版本兼容性检查
执行pip list | grep -E "pysb|cython|python"查看版本,PySB对Cython有版本要求(Python3.7+推荐Cython 0.29.x及以上),版本不匹配则卸载重装:pip uninstall cython pysb pip install pysb cython==0.29.36 - 确认C编译器安装
Cython编译依赖本地C编译器:- Windows:安装Visual Studio Build Tools(勾选"Desktop development with C++")
- Linux:执行
sudo apt install gcc(Debian/Ubuntu)或sudo dnf install gcc(RHEL/CentOS) - Mac:执行
xcode-select --install安装Command Line Tools
- 验证模型兼容性
确保模型仅使用PySB原生组件(Monomer、Parameter、Rule等),避免在规则表达式中嵌入自定义Python函数——Cython不支持这类非原生逻辑 - 清理编译缓存
删除项目目录下的*.so(Linux/Mac)、*.pyd(Windows)文件及build文件夹,重新执行编译,避免旧缓存冲突 - 指定编译参数
尝试手动添加优化参数并开启日志,定位具体编译问题:from pysb.simulator import ScipyOdeSimulator sim = ScipyOdeSimulator(model, compiler='cython', compiler_args=['-O3'], verbose=True) sim.run()
前置验证
先运行无Cython加速的仿真确认模型本身可用:
from pysb.simulator import ScipyOdeSimulator sim = ScipyOdeSimulator(model) sim.run()
如果这一步报错,优先修复模型逻辑问题。
内容的提问来源于stack exchange,提问作者francis didier TSHIANYI MWANA
相关产品推荐
相关产品推荐

