我试过 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
。但是为什么我不能一次更新所有这些?
conda update --all --alt-hint
看看它是否提供任何输出......或者只是尝试 conda update scipy
看看会发生什么(可能使用 --alt-hint
标志)
But why I cannot update all of them in one go?
可能是因为您至少有一个依赖于旧版本的软件包,因此无法更新任何内容。
conda update --all
之前运行 conda update conda
TL;DR:依赖冲突:更新一个需要(根据它的要求)降级另一个
你说的对:
conda update --all
实际上是go1的方法。 Conda 总是尝试将软件包升级到该系列中的最新版本(例如 Python 2.x 或 3.x)。
依赖冲突
但是可能存在依赖冲突(这会阻止进一步升级)。如果它们发生,Conda 通常会非常明确地发出警告。
例如 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,反之亦然。
(当然,这是一个教学示例,但实际上是相同的,通常只是具有更复杂的依赖关系和子依赖关系)
因此,您仍然无法通过单独进行升级来全部升级;依赖关系是不能满足的,所以早晚,升级将再次降级已经升级的包。或者破坏包的兼容性(您通常不想要!),这只能通过显式调用忽略依赖项和强制命令来实现。但这只是为了解决问题,绝对不是普通用户案例!
1 如果你真的想更新你安装的包,你通常不要。在基本环境中运行的命令将更新其中的包,但通常您应该使用虚拟环境(conda create -n myenv
,然后是 conda activate myenv
)。在这样的环境中执行 conda update --all
将更新在这个环境中的包。然而,由于基础环境也是一个环境,所以答案以同样的方式适用于这两种情况。
要更准确地回答这个问题:
conda(与 Anaconda 一样是 miniconda 的 conda)更新所有内容,但仅在包的特定版本内 -> 主要和次要版本。这就是范式。
在文档中,您将找到“注意:Conda 更新到其系列中的最高版本,因此 Python 2.7 更新到 2.x 系列中可用的最高版本,而 3.6 更新到 3.x 系列中可用的最高版本。” doc
如果王没有给出一个可复制的例子,那只能提供帮助。例如,这真的是他想要更新的虚拟环境吗,或者王能得到他/她想要的东西吗?
conda update -n ENVIRONMENT --all
*请在执行“update --all”之前阅读文档!本质上,这不会导致所有软件包的更新。因为 conda 试图解决环境中所有包之间的依赖关系,这可能会导致 DOWNGRADED 包没有警告。
如果你只想更新几乎所有,你可以创建一个 pin 文件
echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned
在运行更新之前。 conda issues not pinned
如果稍后您想忽略 env 中的文件进行更新,您可以执行以下操作:
conda update --all --no-pin
你不应该更新 --all。如果您仍然需要它,您可以在克隆环境中进行测试。
第一步应该始终是备份您当前的规范:
conda list -n py35 --explicit
(但即便如此,并不总是有可用源的链接——比如 jupyterlab 扩展)
接下来,您可以 clone 并更新:
conda create -n py356 --clone py35
conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all
更新:
目前我会使用 mamba(或 micromamba)作为 conda pkg-manager 替代品
更新:
因为 conda 的想法很好,但它在复杂的环境中效果不佳,我个人更喜欢 nix-shell
(或 lorri
)和 poetry
的组合 [作为优越的 pip/conda .-)] ({1 })。
或者,您可以使用 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 等技术。
conda update -n ENVIRONMENT --all
:我同意这是他/她通常想要使用的,而不是更新基础环境。但是,我在您的答案中根本没有找到解释,它只是写出来的,并没有提到在基本环境中使用 op 命令的区别。
想象一下包的依赖关系图,当包的数量变大时,升级/添加包时遇到冲突的几率要高得多。为避免这种情况,只需在 Anaconda 中创建一个新环境即可。
节俭,只安装你需要的东西。对我来说,我在新环境中安装了以下软件包:
熊猫
scikit-学习
matplotlib
笔记本
喀拉斯
我总共有 84 个包裹。
我同意Mayou36。
例如,我在基础环境中安装新包时犯了一个错误,其中一些包使用 conda,其他一些包使用 pip。
为什么这很糟糕?
1.这些都无助于更新已经 > 安装 > 通过 pip 从 PyPI 安装的软件包,或使用 python setup.py install 安装的任何软件包。 conda list 会给你一些关于你在环境中基于 pip 的 Python 包的提示,但它不会做任何特别的更新它们。
而且我的所有项目都在同一个环境中!而且我使用了全部更新-这很糟糕并且没有全部更新-。
所以,最好的办法是为每个项目创建一个新环境。为什么?
2. Conda 环境是一个目录,其中包含您已安装的特定 Conda 软件包集合。例如,您可能正在从事一个需要 NumPy 1.18 及其依赖项的研究项目,而与已完成项目相关的另一个环境具有 NumPy 1.12(可能是因为 1.12 版是项目完成时 NumPy 的最新版本)。如果您更改一个环境,您的其他环境不会受到影响。您可以轻松地激活或停用环境,这就是您在它们之间切换的方式。
所以,总结一下:
为每个项目创建一个新环境注意 conda 和 pip 的差异
3.仅包含您实际需要的包,并仅在必要时正确update它们。
如果在 MS windows 中工作,您可以使用 Anaconda 导航器。点击环境,在下拉框中,默认为“已安装”。您可以选择“可更新”并从那里开始
要更新我使用的所有可能的软件包 conda update --update-all
有用!
我用 conda
和 pip
解决了这个问题。
首先,我运行:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
之后,我打开 cmd 并运行这段代码
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
最后,您应该通过以下代码在 pip 中安装 matplotlib
pip install matplotlib