为什么 Pixi 是神
WARNING纯搞笑,请务必不要当真。但是你真的该试试。
Pixi为什么是神?在谈论这个问题之前,我想先说说其他包管理相较于Pixi究竟差在了哪里。
首先是犯下傲慢之罪的uv
uv自称为Python界的Cargo,便以为极速本身足以凌驾复杂的工程现实。它不仅重写了pip,甚至接管了Python解释器的安装,在单一平台、纯Python依赖中所向披靡。但它对跨语言ABI、系统级动态链接库、以及底层C/C++的业障视而不见,仿佛只要Rust写的resolver足够快,环境就能自然稳定。正如走位躲酒桶却不看兵线,uv的傲慢在于它把PyPI当作宇宙的全部,而神早已知道,真正的灾难永远发生在需要链接CUDA和FFmpeg的CI与生产环境里。
然后是犯下愤怒之罪的pdm
pdm的诞生源于对pip混乱与低效现状的愤怒,于是它急于建立一套“更正确”的PEP 582教义。然而它仍然死死抱住PyPI的大腿,拒绝为纯Python之外的开发范式负责。愤怒让它一叶障目:当项目需要一个跨平台的shell脚本,或者需要优雅地管理生命周期任务时,它显得力不从心。
接着是犯下懒惰之罪的conda
conda曾经真正解决过问题,它让二进制依赖第一次在Python世界里有了归宿。但在胜利之后,它选择了对工程复杂性的放任:base环境不断膨胀,solver复杂度指数级增长,环境状态高度隐式。它默认用户“自己知道在干什么”,却不提供足够明确的项目边界。神给过它警示,但它更愿意依赖旧时代的成功经验,而非重构环境模型本身。
再然后是犯下了嫉妒之罪pyx
0人在意。
犯下贪婪之罪的pip
pip的贪婪在于它不肯承认自己的边界。它本该只是分发与安装工具,却默认承担了解析、环境构建乃至工程可靠性的期待。它允许一切版本并存,却拒绝锁定真实发生过的组合;它让“能装上”成为成功标准,却不对“下次是否还能装上”负责。正如被神眷顾的少年贪恋荣光,pip让无数项目停留在“本地能跑”的幻觉中。
犯下暴食之罪的poetry
poetry试图成为Python工程的一切:依赖、环境、构建、发布、规范。它在纯Python世界中显得优雅而完整,却在面对非Python依赖时暴露出消化不良的问题。它吞下了过多职责,却没有能力统一系统级依赖的来源,最终只能在复杂工程前止步。神曾减轻它的压力,但它误以为秩序来自封闭体系,而非对现实的妥协与整合。
Pixi 为什么是神
神说,纯Python的隔离只是自欺欺人,于是Pixi有了conda-forge,让C++、Rust乃至系统工具与Python包同级共存。
神说,天下武功唯快不破,于是Pixi同样由Rust铸造血肉,有着不输uv的解析极速,却依然保持着对二进制依赖的敬畏。
神说,工程的尽头是绝对的一致性,于是Pixi带来了跨平台的pixi.lock和原生集成的Task Runner。它不需要你预装Python,不需要你配置环境变量,它包容了一切,却又将每个项目严格隔离在完美的沙盒之中。
神不傲慢,因为它同时兼容PyPI与Conda;神不懒惰,因为它把环境配置精确到了每一行pixi.toml。Pixi降临,就是为了终结这场长达十年的包管理圣杯战争。