Julia中DiffEqUncertainty.jl与Quadrature.jl版本兼容问题求助
问题根因
Quadrature.jl 已被SciML生态官方弃用,全量重构后重命名为Integrals.jl,所有新功能迭代、bug修复都只在Integrals.jl上推进,旧Quadrature.jl仓库已经归档跳转,不再做任何版本更新,这是所有版本冲突、功能异常的核心诱因。
DiffEqUncertainty.jl的版本迭代也同步完成了依赖切换:1.2.0等旧版本依赖Quadrature.jl,1.8.0等新版本已经完全移除对Quadrature.jl的依赖,切换为对Integrals.jl的调用,二者不存在兼容的最新版本组合,包管理器在解析依赖时只能二选一匹配,才会出现升级一个包就自动降级另一个的现象。
异常现象对应说明
- 初始安装得到DiffEqUncertainty@1.2.0 + Quadrature@2.1.0组合下
expectation运行异常:Quadrature@2.x是官方做迁移时发布的空壳过渡包,本身没有实际功能实现,仅做接口转发,和旧版DiffEqUncertainty的调用逻辑不匹配,必然触发运行错误。 - 执行
] up无版本变化、强制升级DiffEqUncertainty到1.8.0后Quadrature被自动降级到1.12.0:是包管理器依赖解析的正常结果,DiffEqUncertainty@1.8.0不兼容Quadrature@2.x的空壳接口,只能匹配最后一个带实际功能实现的Quadrature@1.12.0,该版本仅实现了MonteCarlo()对应的调用逻辑,没有适配Koopman()求解器的积分接口,因此传入该参数时无法执行。 - Quadrature包页面跳转至Integrals.jl代码仓库:是官方主动配置的归档跳转,不属于访问链路异常。
修复操作步骤
按以下步骤清理废弃依赖、安装官方维护的正式依赖组合即可解决全部问题:
- 在Julia REPL按
]进入Pkg模式,执行命令移除旧的废弃包:
rm DiffEqUncertainty Quadrature
- 清理环境内残留的旧版本依赖缓存:
gc
- 如果是在本地独立项目环境中操作,先按退格键退出Pkg模式回到REPL主模式,执行以下命令删除旧的版本锁定文件,避免历史版本规则干扰依赖解析:
rm(joinpath(pwd(), "Manifest.toml"))
- 重新按
]进入Pkg模式,安装当前官方维护的依赖组合,不需要再安装Quadrature.jl,其所有功能已由Integrals.jl承接:
add DiffEqUncertainty Integrals
后续使用SciML生态相关包时,若遇到Quadrature相关的接口报错,直接将代码里的
using Quadrature替换为using Integrals即可,二者上层接口完全对齐,不需要修改其他业务代码。
安装完成后expectation函数的MonteCarlo()、Koopman()等所有参数选项均可正常调用,不会再出现版本冲突问题。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

