主要观点:应停止使用 nix-env,因其存在诸多问题,如导致意外行为、引发名称冲突、导致意外的主版本跳跃、存在性能问题、造成隐晦的遮蔽以及隐含的包固定等,有多种替代方案。
关键信息:
- nix-env 为传统管理包工具,常致意外行为,需用其他替代。
- 安装包时通过派生名可能导致意外,用 nix-env -iA 可避免但不知包来源。
- 升级包时名称冲突,不同语言生态包虽属性路径不同但派生名可能相同。
- 会导致无意的主版本跳跃,如安装 PostgreSQL 。
- 性能不佳,遍历大型包集效率低。
- 会造成隐晦的遮蔽,影响系统工具使用。
- 安装的包独立于系统配置,易致混淆。
- 有 Matthew Croughan 的相关视频演示问题。
替代方案: - 声明式包管理:用于长期使用的包,通过 NixOS 配置或 Home Manager 管理,系统服务可通过其配置自动定义 systemd 服务。
- 临时 shell 环境:用于临时需要某命令,可通过 ephemeral shells 或 nix shell 获得临时访问。
- nix profile:从 Nix 3.0 开始,通过属性名安装包,避免升级时的名称冲突,可从其他包集合安装包。
文档版本 1.2.1,是活文档,欢迎贡献。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。