我试过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
。但是为什么我不能一次更新所有的呢?
TL;DR:依赖关系冲突:更新一个需要(根据其要求)来降级另一个
你说得对:
才是真正的出路。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,反之亦然。
(当然,这是一个教学示例,但实际上是一样的,通常只是具有更复杂的依赖项和子依赖项)
因此,您仍然无法通过单独进行升级来升级所有的;依赖关系只是不可满足,因此,无论是早是晚,升级都会再次降级已升级的包。或者破坏软件包的兼容性(这通常是你不想要的!),这只有通过显式调用忽略依赖项和强制命令才能实现。但这只是为了解决问题,绝对不是正常的用户情况!
想象一下包的依赖关系图,当包的数量增加时,在升级/添加包时遇到冲突的可能性要高得多。为了避免这种情况,只需在水蟒身上创造一个新的环境。
节俭点,只安装你需要的。对我来说,我在新环境中安装了以下软件包:
我一共有84个包裹。
为了更准确地回答这个问题:
conda(它是miniconda和Anaconda的conda)只更新包的特定版本中的所有内容->;major和minor。这就是范例。
在文档中,您将看到“注意:Conda更新到其系列中的最高版本,因此Python 2.7更新到2.x系列中可用的最高版本,3.6更新到3.x系列中可用的最高版本。” doc
如果王没有给出一个可复制的例子,人们只能提供帮助。 e、 g.这真的是他想要更新的虚拟环境吗,或者王能用它来得到他/她想要的东西吗
如果只想几乎全部更新,可以创建pin文件
在运行更新之前。
如果稍后要忽略env中的文件进行更新,可以执行以下操作:
你不应该全部更新。如果您仍然需要它,您可以在克隆环境中进行测试。
第一步应该始终是备份当前规范:
(但即使如此,也不总是有指向可用源的链接,比如jupyterlab扩展)
接下来,您可以克隆和更新:
conda config
最后,如果您确实需要处理由于依赖关系而不兼容的包,那么可以使用NixOS/nix-pkgs等技术。
相关问题 更多 >
编程相关推荐