跳转到内容

环境管理器

我对 环境管理器 的定义是提供了多种环境,或能对环境进行操作的工具。

  • Conda 可用于配置多种语言的运行环境,可以激活、修改、创建、删除环境
  • Pixi 更注重项目管理的现代版 Conda
  • Mise 可用于管理开发环境,有切换工具链版本、设置环境变量、运行任务等功能
  • MSYS 提供了符合 POSIX 标准的编程环境
  • WSL 提供了原生而非移植的 Linux 环境
  • Docker 容器把应用程序及其依赖打包在一起,是一种非常现代的环境解决方案

环境管理是一个很麻烦的事情,因此有了很多很多的工具。而工具多了又会出现新的问题:该选择哪个工具呢?我目前遵循着这样的实践

  • 科学计算 使用 Conda/Pixi 管理环境。科学计算项目是典型的 混合栈,比如一个 Python 库通常要用 C++ 编译的二进制文件加速,并且还可能依赖特定版本的 CUDA 运行时。Conda/Pixi 对于这种多语言混合环境处理得最好。
  • 应用开发 使用 Mise 管理环境。实际的应用项目普遍存在 多个独立的运行时,比如前端开发环境通常需要 NodeJS,后端通常需要 Go,一个项目甚至可能有多个运行时各不相同前端或后端。Mise 非常适合应对这种场景。
  • 系统编程 使用 MSYS/WSL 管理环境。由于 C/C++ 历史包袱太严重,系统包管理器在某些时候充当了语言包管理器,因此像 MSYS/WSL 这样的环境有时会很方便。而对于 Rust/Zig 等更现代的语言,由于有更合理的工具链,因此通常不需要这么麻烦。
  • 特殊情况 对于一些特殊情况,比如没有更好的工具可选,或者该语言的生态高度一体化(比如 .NET),我会选择官方的工具。

目前还没有提到以 Docker 为代表的容器工具。上述所有环境配置都可以只使用容器完成,不过前提是有人提供了能满足你所有需要的容器镜像。毕竟 复杂度不会消失,只能转移,如果没有人帮你解决环境配置的问题,那么你仍要自己面对这个恐怖的东西。

因此,尽管容器大概率就是环境管理的终极武器,但我还是会学习并使用各种环境管理工具。