PyMC3适配Theano版本选择及依赖兼容报错问题咨询
问题成因说明
- 你使用的
theano = "^1.0.5"、pymc3 = "^3.9.3"属于带范围的版本约束,Poetry拉取依赖时会自动安装匹配大版本号的最新修订包,不会锁定你几个月前跑通PoC时的精确代码快照。 - 几个月前你跑通项目时,PyMC3 3.9.3的代码版本还适配原版Theano 1.0.5;但PyMC开发组后续对3.9.x分支的依赖规则做了修改,要求该分支后续安装的版本必须替换原版Theano为独立维护的Theano-PyMC包,不再兼容原版Theano,因此新拉取的同大版本号PyMC3会直接弹出版本不匹配的警告。
- 后续出现的连环报错本质是依赖安装混乱导致的:
- 卸载原版Theano后安装的Theano-PyMC如果版本过高,会因为后续版本的包结构调整(从Theano-PyMC逐步迁移到Aesara),移除了旧版的
theano.__version__入口属性,直接触发AttributeError。此时额外安装Aesara不仅无法修复问题,还会进一步覆盖theano模块的文件结构。 - 同时安装原版Theano和Theano-PyMC时,两个包都会往site-packages下的theano目录写入同名文件,互相覆盖导致模块内容残缺,才会出现配置解析器缺少
gcc__cxxflags属性的报错——该属性在原版Theano 1.0.5中是原生存在的,文件被覆盖残缺后自然无法找到。
- 卸载原版Theano后安装的Theano-PyMC如果版本过高,会因为后续版本的包结构调整(从Theano-PyMC逐步迁移到Aesara),移除了旧版的
- 警告里附带的wiki链接因为开发组后续搬迁了文档内容,已经没有有效参考信息,无法直接指导操作。
可正常运行的版本搭配方案
- 优先还原原有PoC的运行环境,把依赖的版本范围去掉,锁死精确版本后重建虚拟环境:
操作前必须清空当前虚拟环境,完全卸载所有theano、theano-pymc、aesara相关的残留包,避免文件覆盖冲突。[tool.poetry.dependencies] theano = "1.0.5" # 移除^符号,锁定原版Theano精确版本 pymc3 = "3.9.3" # 移除^符号,锁定和原版Theano配套的PyMC3快照 - 如果选择按照PyMC3的新提示使用Theano-PyMC作为依赖,必须把版本锁死为
theano-pymc = "1.1.2",这个版本是PyMC3 3.9.3官方匹配的兼容版本;高于1.1.2的Theano-PyMC已经完成向Aesara的迁移,会出现模块属性缺失的问题,无法正常运行。 - 注意:
theano(原版)、theano-pymc、aesara三个包不能同时存在任意两个,三者共享theano模块的文件入口,同时安装必然会造成文件覆盖、模块残缺的报错,必须按版本配对二选一安装。
内容的提问来源于stack exchange,提问作者GoneAsync
相关产品推荐
相关产品推荐

