#conda #package #repository #filtering #solve #remove #dev

bin+lib conda_curation

减少 conda repodata 以强制执行策略并加快解决速度。Alpha 软件。

4 个版本 (重大更改)

0.7.0 2024 年 7 月 14 日
0.6.0 2024 年 6 月 28 日
0.2.0 2024 年 5 月 20 日
0.1.0 2024 年 5 月 7 日

#6 in #solve

MIT 许可证

56KB
1K SLoC

conda_curation

conda_curation 是一个工具,旨在过滤 conda 仓库,特别是 Conda Forge,以根据各种标准删除软件包。

功能

过滤

  • 删除不匹配用户提供的该软件包匹配规范的软件包(例如,请参阅 matchspecs/secure_python.yaml
  • 删除被新构建覆盖的软件包(即 python-3.9.18-h12345678_0 被覆盖 by python-3.9.18-h12345678_1,因此删除前者软件包)
  • 删除 devrc 软件包(即 2.0.0.dev02.0.0.rc0)。
  • 删除跟踪不希望的功能的软件包(即 pypy 等)
  • 删除与用户选择的任何软件包的候选者不兼容的软件包。例如,如果用户只选择 python >=3.12,并指定 -C python,则较旧的 openssl,如 openssl 1.1.1n 将被删除,因为 mamba create -n ... openssl==1.1.1n python>=3.12 无法解决。
  • 应用上述所有过滤器后,执行后续分析以查找现在已删除的依赖项的依赖软件包,并删除这些软件包,然后递归地应用此操作。例如,过滤掉 Python 2.7 还将过滤掉所有针对 Python 2.7 编译的 numpy 构建。

标准

  • 支持CEP-15 base_url:如果源代码库(如由--channel-alias标志指定的)尚未设置info.base_url,则输出repodata.json将设置其info.base_url--channel-alias。如果它已经在原始的repodata.json中设置,则将保留它。

    如果所有客户端都支持CEP-15,则无需配置代理服务器以将所有包请求重定向到--channel-alias目的地。

应用

conda_curation服务于从小型到中型企业的企业,这些企业希望开始使用Conda作为内部工具,并希望利用丰富的Conda Forge包生态系统,而不是创建自己的包或手动定制。

解决性能

conda_curation被创建的主要原因是性能:通过将Conda Forge的repodata减小到更小的尺寸,可能会观察到显著的Conda客户端性能提升。在芝加哥交易公司,将此repodata过滤系统应用于Conda-Forge的原型降低了mamba mambabuild运行时间,大约缩短了两分钟,跨越了各种管道。观察到mamba create --dry-run命令从20秒缩短到10秒。解决失败也变得更快(并且更干净)。

政策执行

安全团队可能要求企业内部完全不可用不安全的包,例如较旧的Python解释器、CA证书捆绑包、OpenSSL版本等。conda_curation能够创建这些类型的策略。

Alpha软件

此软件具有显著的功能限制,因为它最初只针对芝加哥交易公司的最小可行产品(MVP),以适应特定的点。因此,用户需要自己提供HTTP代理/缓存代理系统来提供包,但同时也包含了对.*repodata.*\.json.* URL的转置,这些URL重定向到conda_curation的渲染输出。我们在测试阶段使用nginx和301重定向将资产下载到工件服务器,并在部署阶段直接将nginx放置在工件服务器之前,成功地做到了这一点。

历史

此工具的原型最初由我(@AaronOpfer)在芝加哥交易公司开发,基于我的同事Bozhao Jiang的观察,即手动定制的“定制”通道使得conda构建比以前快几分钟。原始版本是用Python编写的,由于其性能问题,随着开发周期时间的延长,达到了特征开发的硬限制。我在业余时间用Rust重写了这个项目,并获得了在MIT许可证下向社区发布它的许可。

特别感谢

  • Bozhao Jiang
  • Derek Shoemaker
  • Jason Bryan
  • Mel Williams

依赖关系

~34–71MB
~1.5M SLoC