我尝试了conda搜索——过时了,有很多过时的包,例如scipy是0.17.1,但最新的是0.18.0。然而,当我做conda更新时,所有。它不会更新任何包。

更新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更新scipy。但是为什么我不能一次更新所有这些呢?


当前回答

我用康达和皮普解决了这个问题。

首先,我跑:

conda uninstall qt和conda uninstall matplotlib和conda uninstall PyQt5

在那之后,我打开cmd并运行这段代码

pip卸载qt, pip卸载matplotlib, pip卸载PyQt5

最后,您应该通过pip安装matplotlib的代码来安装matplotlib

其他回答

依赖冲突:更新一个依赖需要(根据需求)降级另一个依赖

你说得对:

conda update --all

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

依赖冲突

但是有可能存在依赖冲突(这会阻止进一步升级)。如果发生这种情况,康达通常会非常明确地发出警告。

例:X要求Y <5.0,所以Y永远不会是>= 5.0

这就是为什么你“不能”全部升级它们。

解决

补充一句:也许它可以工作,但在conda中无法使用X与Y一起工作的新版本> 5.0。可以使用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,反之亦然。

(当然,这是一个教学示例,但在现实中是一样的,通常只是有更复杂的依赖项和子依赖项)

所以你仍然不能通过单独升级来升级它们;依赖关系是不能满足的,所以无论早晚,升级都会再次降级已经升级的包。或者破坏包的兼容性(这通常是您不希望的!),这只能通过显式调用ignore-dependencies和force命令来实现。但这只是解决问题的方法,绝对不是普通用户的情况!


如果你真的想要更新你的安装包,而你通常不会这样做。在基本环境中运行的命令将更新其中的包,但通常应该使用虚拟环境(conda create -n myenv,然后conda activate myenv)。执行conda update——所有在这样一个环境中的操作都将更新该环境中的包。但是,由于基本环境也是一个环境,因此答案以相同的方式适用于这两种情况。

更准确地回答这个问题:

conda(对于miniconda是conda,对于Anaconda是conda)只更新包的特定版本——> major和minor。这就是范例。

在文档中,你会发现“注意:Conda更新到其系列中的最高版本,因此Python 2.7更新到2中可用的最高版本。X系列和3.6更新到最高可用的3。x系列。” 医生

如果王没有给出一个可重复的例子,人们只能提供帮助。 例如,他想要更新的真的是虚拟环境吗?或者他能得到他/她想要的

conda update -n ENVIRONMENT --all

*请在执行“更新—全部”之前阅读文档! 这并不会导致所有包的更新。因为conda试图解决环境中所有包之间的依赖关系,这可能导致没有警告的降级包。


如果你只想更新几乎所有,你可以创建一个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

您不应该执行update—all。如果你需要它,你可以在克隆环境中测试它。

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

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

第二problem


更新:

目前我将使用曼巴(或micromamba)作为conda pkg-manager的替代品


更新:

因为conda的想法很好,但它不适合复杂的环境,我个人更喜欢nix-shell(或lorri)和诗歌的组合[作为优于pip/conda .-)](介绍poetry2nix)。

或者,您可以使用nix和mach-nix(其中您只需要您的需求文件。它能最好地解决和构建环境。


在Linux / macOS上,你可以使用nix

nix-env -iA nixpkgs.python37

进入一个包含Python3.7的环境(当然你可以更改版本)

或者作为一个非常好的Python(高级)环境,你可以使用mach-nix(与nix)一样

mach-nix env ./env -r requirements.txt 

(它甚至支持conda[但目前处于测试版])

或者通过API

nix-shell -p nixFlakes --run "nix run github:davhau/mach-nix#with.ipython.pandas.seaborn.bokeh.scikit-learn "

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

如果在MS windows中工作,您可以使用蟒蛇导航器。单击环境,在下拉框中,默认为“已安装”。你可以选择“updatable”并从那里开始

想象一下包的依赖关系图,当包的数量增加时,在升级/添加包时遇到冲突的几率要高得多。要避免这种情况,只需在Anaconda中创建一个新环境。

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

pandas scikit-learn matplotlib 笔记本 努力

我总共有84个包裹。

为了更新所有可能的包,我使用conda update——update-all

它的工作原理!