conda包版本管理中单等号“=”与双等号“==”有什么区别?
Conda包版本指定规则中单等号
=与双等号==的差异 核心匹配规则差异如下:
- 单等号
=为模糊匹配规则- 写部分版本号段时,会匹配前缀相同的最新版本:例如
pyyaml=5.4会匹配所有主版本为5、次版本为4的最新补丁版本,包括5.4.0、5.4.1等 - 写全三段版本号时,允许匹配同版本号下的不同构建版本:例如
alembic=1.4.2会匹配所有版本号为1.4.2的包,不管其构建后缀(如py310hxxxx、py39hxxxx等构建标识)
- 写部分版本号段时,会匹配前缀相同的最新版本:例如
- 双等号
==为精确匹配规则- 要求版本字符串完全对应,不自动扩展匹配补丁版本:例如
pyyaml==5.4仅会匹配版本号严格为5.4的包,不会匹配5.4.0、5.4.1等版本,若仓库中不存在严格为5.4的版本则会安装失败 - 写全三段版本号时也会严格匹配版本字符串,仅当包版本与写的内容完全一致时才会安装,不会兼容不同构建版本
- 要求版本字符串完全对应,不自动扩展匹配补丁版本:例如
针对示例的具体说明
alembic=1.4.2和alembic==1.4.2的差异
如果目标包不存在带后缀的1.4.2版本,两者安装结果完全一致;如果存在多个不同构建版本的1.4.2包,前者会自动选适配当前环境的最新构建版本,后者仅会匹配版本字符串完全为1.4.2的包。pyyaml=5.4和pyyaml==5.4的表现完全不同
前者会自动安装最新的5.4.x补丁版本,后者仅能匹配版本号严格为5.4的包,无对应版本时会报错。
写法推荐
- 日常开发、允许兼容补丁更新的场景,更推荐用单等号
=,这也是conda原生的标准语法,兼容性更好 - 需要100%复现环境、严格锁定版本的场景,用双等号
==写全完整版本号即可
内容的提问来源于stack exchange,提问作者Sumit Ghosh
相关产品推荐
相关产品推荐

