防止conda自动降级python包

use*_*486 2 python anaconda conda pandas-datareader conda-forge

我在使用v0.8.1 包时遇到问题。pandas-datareader为了解决我的问题,我必须通过运行以下命令将软件包升级到较新的版本 0.9:

conda install -c anaconda pandas-datareader
Run Code Online (Sandbox Code Playgroud)

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

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

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

mer*_*erv 5

指定最低版本

Conda 足够强大,可以解析最小版本,并且它会记住它们已被指定。如果您希望 0.9 作为最小值,那么您只需这样说

conda install 'pandas-datareader>=0.9'
Run Code Online (Sandbox Code Playgroud)

或者

conda install pandas-datareader[version='>=0.9']
Run Code Online (Sandbox Code Playgroud)

运行此命令后,它将被添加到您的显式规范1中,并且应该至少锁定该版本pandas-datareader,包括在后续conda update --all运行中。2 这个答案对 Conda 的 MatchSpec 系统进行了更全面的描述,涵盖了可以指定的范围。

通道规格

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

要明确指示包应该来自通道,应该使用

conda install anaconda::pandas-datareader
Run Code Online (Sandbox Code Playgroud)

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

封装固定

否则,封装固定可能是另一种选择。


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

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