性能#

Conda 的性能会受到多种因素的影响。与许多软件包管理器不同,Anaconda 的存储库通常不会过滤或删除索引中的旧软件包。这使得旧环境可以轻松地重新创建。但是,这也意味着索引元数据一直在增长,因此随着软件包数量的增加,conda 的速度会变慢。

软件包的安装方式#

在您等待时,conda 正在执行大量工作来安装软件包。在这些步骤的任何时候,都可能出现性能问题。

安装软件包时,Conda 会执行以下步骤

  1. 下载和处理索引元数据。

  2. 缩减索引。

  3. 将软件包数据和约束表达为 SAT 问题。

  4. 运行求解器。

  5. 下载和解压缩软件包。

  6. 验证软件包内容。

  7. 将软件包从软件包缓存链接到环境中。

因此,如果您遇到速度变慢的情况,请评估以下问题以确定潜在原因

  • 您是在创建一个新环境还是安装到现有环境中?

  • 您的环境中是否包含使用 pip 安装的依赖项?

  • 您使用的是哪些频道?

  • 您要安装哪些软件包?

  • 频道元数据是否正常?

  • 频道是否以不良方式相互作用?

提高 conda 性能#

为了解决这些挑战,您可以将软件包移至归档频道,并按照以下方法为 conda 提供一个比所有可用软件包更小、更简单的视图。

为了加快 conda 的速度,我们提供以下建议。

您是否
  • 使用 conda-forge?
    • 使用 conda-metachannel 减少 conda 的问题规模。

  • 使用 bioconda?
  • 指定非常广泛的软件包规范?
    • 更加具体。让 conda 过滤掉更多候选者可以提高速度。例如,我们建议使用 numpy=1.15 而不是 numpy,甚至更好地使用 numpy=1.15.4

    • 如果您使用的是 R,请不要只指定 r-essentials,而要指定 r-base=3.5 r-essentials

  • 对“验证交易”感到沮丧,并且感到幸运?
    • 运行 conda config --set safety_checks disabled

  • 出现默认值和 conda-forge 的奇怪混合?
    • 运行 conda config --set channel_priority strict

    • 这也会通过消除可能的混合解决方案来加快速度。

  • 观察到 Anaconda 或 Miniconda 安装随着时间的推移变得越来越慢?
    • 创建一个新的环境。随着环境的增长,它们变得越来越难以求解。使用小型、专用环境可以更快。

详细了解 我们如何使 conda 速度更快

设置严格的频道优先级#

设置严格的频道优先级使得如果某个软件包存在于某个频道中,那么 conda 将忽略所有具有相同名称的位于较低优先级频道上的软件包。

../../_images/strict-disabled.png
../../_images/strict-enabled.png

这可以显着减少软件包搜索空间,并减少对约束不当的软件包的使用。

需要注意的是,设置严格的频道优先级可能会导致环境无法满足。详细了解 严格的频道优先级

缩减索引#

缩减索引是加快 conda 速度的一种方法。conda 会根据用户的输入规范来缩减索引。您的 repodata 可能会包含在求解阶段未使用的软件包数据。在求解之前过滤掉这些不必要的软件包可以节省时间。

使您的输入规范更加具体可以提高索引缩减的有效性,从而加快进程。为每个规范列出版本和构建字符串可以显着减少在求解时考虑的软件包数量,从而使 SAT 不需要做那么多工作。

缩减索引
  • 减少生成求解器子句的不必要输入。

  • 降低求解复杂度。

  • 优先使用应用约束的较新软件包。

阅读更多关于 理解和改进 Conda 的性能