水蟒更新所有可能的包裹?

2024-04-27 04:12:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过conda search --outdated,有很多过时的包,例如scipy是0.17.1,但最新的是0.18.0。但是,当我做conda update --all时。它不会更新任何包。

更新1

conda update --all --alt-hint

Fetching package metadata .......
Solving package specifications: ..........

# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#

更新2

我可以单独更新这些包。我可以做conda update scipy。但是为什么我不能一次更新所有的呢?


Tags: packagesearchpackagesupdatescipyallaltconda
3条回答

TL;DR:依赖关系冲突:更新一个需要(根据其要求)来降级另一个

你说得对:

conda update --all

才是真正的出路。Conda总是尝试将包升级到系列中的最新版本(比如Python 2.x或3.x)。

依赖关系冲突

但可能存在依赖冲突(这会阻止进一步升级)。康达通常非常明确地警告如果他们发生。

例如,X需要Y<;5.0,因此Y永远不会>;=5.0

这就是为什么你不能全部升级。

解析

要添加:也许它可以工作,但conda中不提供使用Y>;5.0的X的新版本。可以使用pip安装,因为pip中提供了更多的软件包。但是请注意,如果存在依赖性冲突,pip也会安装软件包,并且它通常会破坏conda环境,因为您不能再使用conda可靠地安装了。如果您这样做了,作为最后的手段,在所有软件包都安装了conda之后再这样做。这是一个相当棘手的问题。

一种安全的方法是在升级时添加conda-forge作为通道(添加-c conda-forge作为标志),或者如果您真的需要这个新版本的的话,添加包含包的任何其他通道。这样,conda也会在这些地方搜索可用的包。

考虑到您的更新:您可以分别对它们进行升级,但这样做不仅包括对另一个包的升级,还包括对另一个包的降级。例如,要添加到上面的示例中:

X>;2.0需要Y<;5.0,X<;2.0需要Y>;5.0

因此,升级Y>;5.0意味着将X降级为<;2.0,反之亦然。

当然,这是一个教学示例,但实际上是一样的,通常只是具有更复杂的依赖项和子依赖项

因此,您仍然无法通过单独进行升级来升级所有的;依赖关系只是不可满足,因此,无论是早是晚,升级都会再次降级已升级的包。或者破坏软件包的兼容性(这通常是你不想要的!),这只有通过显式调用忽略依赖项强制命令才能实现。但这只是为了解决问题,绝对不是正常的用户情况!

想象一下包的依赖关系图,当包的数量增加时,在升级/添加包时遇到冲突的可能性要高得多。为了避免这种情况,只需在水蟒身上创造一个新的环境。

节俭点,只安装你需要的。对我来说,我在新环境中安装了以下软件包:

  • 熊猫
  • scikit学习
  • matplotlib文件
  • 笔记本
  • 路缘石

我一共有84个包裹。

为了更准确地回答这个问题:

conda(它是miniconda和Anaconda的conda)只更新包的特定版本中的所有内容->;major和minor。这就是范例。

在文档中,您将看到“注意:Conda更新到其系列中的最高版本,因此Python 2.7更新到2.x系列中可用的最高版本,3.6更新到3.x系列中可用的最高版本。” doc

如果王没有给出一个可复制的例子,人们只能提供帮助。 e、 g.这真的是他想要更新的虚拟环境吗,或者王能用它来得到他/她想要的东西吗

conda update -n ENVIRONMENT --all

如果只想几乎全部更新,可以创建pin文件

echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned

在运行更新之前。

如果稍后要忽略env中的文件进行更新,可以执行以下操作:

conda update --all --no-pin

你不应该全部更新。如果您仍然需要它,您可以在克隆环境中进行测试。

第一步应该始终是备份当前规范:

conda list -n py35 --explicit 

(但即使如此,也不总是有指向可用源的链接,比如jupyterlab扩展)

接下来,您可以克隆和更新:

conda create -n py356 --clone py35

conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all

conda config


最后,如果您确实需要处理由于依赖关系而不兼容的包,那么可以使用NixOS/nix-pkgs等技术。

相关问题 更多 >