我尝试了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 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这样的技术。


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

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

pandas scikit-learn matplotlib 笔记本 努力

我总共有84个包裹。


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


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

首先,我跑:

conda uninstall qt和conda uninstall matplotlib和conda uninstall PyQt5

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

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

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


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

它的工作原理!


我同意Mayou36的观点。

例如,我犯了一个错误,在基本环境中安装新包时,对一些包使用conda,对另一些包使用pip。

为什么这不好?

1.这些都不会帮助更新从PyPI通过pip安装的> >的包,或任何使用python安装的包 setup . py安装。康达列表会给你一些提示 基于pip的Python包,但它不会这样做 有什么特别的东西可以更新它们。

我的所有项目都在同一个环境中!我用了update all-这很糟糕,没有更新all-。

所以,最好的办法就是为每个项目创建一个新的环境。为什么?

2. A Conda environment is a directory that contains a specific collection of Conda packages that you have installed. For example, you may be working on a research project that requires NumPy 1.18 and its dependencies, while another environment associated with an finished project has NumPy 1.12 (perhaps because version 1.12 was the most current version of NumPy at the time the project finished). If you change one environment, your other environments are not affected. You can easily activate or deactivate environments, which is how you switch between them.

所以,总结一下:

为每个项目创建一个新环境 注意conda和pip的区别

3.只包含您实际需要的包,并仅在必要时正确地更新它们。