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
56KB
1K SLoC
conda_curation
conda_curation
是一个工具,旨在过滤 conda 仓库,特别是 Conda Forge,以根据各种标准删除软件包。
功能
过滤
- 删除不匹配用户提供的该软件包匹配规范的软件包(例如,请参阅
matchspecs/secure_python.yaml
) - 删除被新构建覆盖的软件包(即
python-3.9.18-h12345678_0
被覆盖 bypython-3.9.18-h12345678_1
,因此删除前者软件包) - 删除
dev
和rc
软件包(即2.0.0.dev0
或2.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