【问题标题】:Prevent conda from automatically downgrading python package防止conda自动降级python包
【发布时间】:2021-03-30 19:35:21
【问题描述】:

我有 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 版本。

【问题讨论】:

    标签: python anaconda conda pandas-datareader conda-forge


    【解决方案1】:

    指定最低版本

    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 优先于 defaults(请参阅 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

    【讨论】:

    • 感谢您的出色回答。我通过测试验证了conda install 'pandas-datareader>=0.9' 将解决问题。标记为正确答案。
    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多