防止conda自动降级python包 指定最低版本通道规格封装固定

问题描述

我有 problemspandas-datareader 软件包 v0.81。为了解决我的问题,我必须通过运行以下命令将软件包升级到更新的 0.9 版本;

conda install -c anaconda pandas-datareader

不幸的是,当我稍后尝试使用命令 conda update --all 升级 conda 软件包时,pandas-datareader 降级回 v0.81。 v0.81 来自 conda-forge 频道。我想要的是 anaconda 频道的 v0.9。

下面是我想要的。

https://anaconda.org/anaconda/pandas-datareader

下面不是我想要的

https://anaconda.org/conda-forge/pandas-datareader

当我运行 conda update --all 时,如何强制 conda 始终将 pandas-datareader 升级到 anaconda 频道中的最新版本?

我在 Windows 10 上使用 python anaconda 2020_07 版本。

解决方法

指定最低版本

Conda 足够强大,可以解析最小版本,并且它会记住它们已被指定。如果你更喜欢 0.9 作为最小值,那么你只需要说

conda install 'pandas-datareader>=0.9'

conda install pandas-datareader[version='>=0.9']

运行此程序后,它将被添加到您的显式规范1 中,并且至少应该锁定该版本pandas-datareader,包括在随后的 conda update --all 运行中。2This answer 对 Conda 的 MatchSpec 系统进行了更完整的描述,其中涵盖了范围可以指定的内容。

通道规格

虽然这不是 OP 真正想要的,但可能值得详细说明为什么会发生频道切换以及如何明确指定频道。 --channel|-c 标志仅在使用它的命令期间添加(并优先考虑)一个通道。它不会告诉 Conda 特定的包应该来自该渠道。因此,由于 OP 在其全局/用户配置中可能将 conda-forge 优先于默认值(参见 conda config --show channels),运行 conda update --all 只会切换回到最近上传的任何版本。

要明确指出一个包应该来自一个频道,应该改为使用

conda install anaconda::pandas-datareader

然后这会将 anaconda::pandas-datareader 添加到显式规范中,并且应该锁定一个事实,即人们期望 pandas-datareader 来自 anaconda 频道。

封装固定

否则,package pinning 可能是另一种选择。


[1] 可以使用 conda env export --from-history 检查明确的规范。

[2] 请注意,某些标志可能会在没有警告的情况下覆盖显式规范,例如 --update-deps

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...