Conda 现在很快了,非常快。

新改进和功能

Conda 的 22.11 版本带来了一系列新改进和功能,这些改进和功能一直受到社区的热切期待。Conda 现在运行速度更快,快得多。以下是值得注意的更改的简要列表。

  • 速度更快的 conda-libmamba-solver 现在不再被标记为实验性。

  • Conda 包下载现在是并行化的。

  • Conda 现在已准备好使用插件,并具有新的架构。

如果您尚未安装 conda,可以通过安装 Anaconda 发行版Miniconda 来完成。如果您已经安装了 conda(您可以在终端中输入“conda info”进行检查),您只需要更新 conda 即可。

conda info
conda update -n base conda
 

新的 conda-libmamba-solver 解释

今年 3 月,conda 团队推出了一款新的实验性求解器,conda-libmamba-solver,作为我们与 Quansight 合作努力的一部分,旨在使 conda 速度更快。速度提升一直是 conda 最受期待的更新之一,经过近一年的联合开发工作,我们非常高兴地宣布,conda-libmamba-solver 现在已加入默认求解器俱乐部。

要安装和设置新的求解器,请运行以下命令

conda install -n base conda-libmamba-solver
conda config --set solver libmamba

您也可以参考这份全面的 入门 指南。经典求解器仍然可用。

conda-libmamba-solver 极大地提高了 conda 在安装包时解决环境的速度。在我们 实验性发布公告 中,我们通过在同一台 Windows 计算机上安装流行的 Python 包 SciPy 和 TensorFlow 来比较求解器的性能。

在该性能测试中,经典求解器在 91 秒内下载了这两个大型库,而基于 libsolv 的求解器 libmamba 仅用了 15 秒,速度提升了约 80%。新求解器的确切速度提升将根据用户安装的环境和包而有所不同,但您可以预期在所有用例中都能看到 50-80% 的速度提升。

在优先考虑最大化向后兼容性的同时,为 conda 实施新的求解器是一项非凡的挑战。Conda 被全球超过 3000 万用户使用,它没有支持实验性工具的基础设施。

直接更新默认求解器本身而不会对现有工作流程造成干扰,需要大量的乐观希望。因此,我们决定与 Quansight 共同开发一个插件架构概念验证,为用户提供选择替代求解器的能力,而不是这样做。

如果您不确定是否应该使用新的求解器,您可以参考“我应该使用 conda-libmamba-solver 吗?”,其中我们详细介绍了经典求解器和 libmamba 求解器之间的差异。

简而言之:conda-libmamba-solver 现在可作为完全支持的求解器选项使用。这得益于新的插件架构。有关插件架构的更多信息,请参见下文。

通过并行下载更快地安装 conda 包

除了提高 conda 的求解速度外,我们还极大地提高了下载和解压缩 conda 包的速度。

并行解压缩可以将解压缩 .conda 和 .tar.bz2 文件的速度提高约一倍。您下载的包越多,与服务器的连接速度越快,并行下载的速度提升就越大。根据您到包服务器的延迟和正在下载的包的数量,并行下载可以将下载过程时间缩短一半左右。

以前,当 conda 需要安装多个包时,conda 会依次评估和解压缩每个包。换句话说,conda 会逐个下载包。现在,conda 将使用多达五个并行下载线程来同时下载多个包。 查看并行下载的实际操作

为了仅演示下载过程的速度提升,性能测试比较了在同一台计算机上安装 conda .lock 文件的速度(.lock 文件包含包、环境和平台详细信息)。该性能测试表明,与已弃用的下载过程相比,速度提升了约 38%(5.8 秒对 3.6 秒)。

如果您仔细查看 conda 在下载过程中的行为,您会注意到,它不再是连续的、自上而下的包下载级联,而是更像是一次左到右的散弹枪射击。

新的插件架构,这是什么?

我们很高兴地宣布,插件架构 将实验性的 conda-libmamba-solver 带到了您的本地 conda 环境中,现在已完全投入运营。Conda 的这种新的插件架构是一个重大变化,我们希望它将成为 conda 社区和生态系统的重要补充。

Conda 的新插件架构允许用户以更低的入门门槛为 conda 做出贡献。我们已经将 conda 的许多方面(例如求解器、虚拟包和自定义子命令)设置为插件兼容,方法是重构 conda 代码库中许多相当大的部分,以包含“钩子”。用户现在可以创建完全自定义的 conda 生态系统插件,以满足他们的特定需求,而无需经过完整的同行评审流程。

此外,由于 conda 语言和平台无关性,conda 现在可以更轻松地整合任何语言和平台上的编程解决方案。

其他值得注意的更改

  • 环境变量 LD_PRELOAD 现在通过“conda info –all”报告。

  • –experimental-solver 标志和 conda_experimental_solver 环境变量现在处于待弃用状态,将分别替换为 –solver 和 SolverChoice。

  • 删除对 toolz 库的依赖:toolz.functoolz.excepts 和 toolz.itertoolz.concatv 都已删除。

阅读 完整的发行说明 这里。

展望未来

我们对让 conda 为每个人都能使用充满热情,对 conda 项目所做的更改和改进将始终以使 conda 性能更高、更灵活、更可扩展为目标。敬请期待 conda 团队对新插件架构、它对 conda 生态系统的影响以及完全用 Rust 编写插件的展示的全面介绍。

我们还要感谢所有为此次 conda 版本做出贡献的贡献者(包括 9 位首次贡献者!)(这些是 GitHub 句柄)

@arq0017 在 #11810 中做出了首次贡献

@beeankha

@conda-bot

@dbast

@dholth

@erykoff

@consideRatio 在 #12028 中做出了首次贡献

@jaimergp

@jezdez

@kathatherine

@kenodegard

@ForgottenProgramme 在 #11926 中做出了首次贡献

@hmaarrfk 在 #9946 中做出了首次贡献

@NikhilRaverkar 在 #11842 中做出了首次贡献

@pavelzw 在 #11849 中做出了首次贡献

@pkmooreanaconda 在 #12014 中做出了首次贡献

@fragmede 在 #11818 中做出了首次贡献

@SatyamVyas04 在 #11870 中做出了首次贡献

@timhoffm

@travishathaway

@dependabot 在 #11965 中做出了首次贡献

@pre-commit-ci[bot]

与专家交谈

与我们的专家交谈,找到 AI 旅程的解决方案。

与专家交谈