环境管理器
我对 环境管理器 的定义是提供了多种环境,或能对环境进行操作的工具。
环境管理是一个很麻烦的事情,因此有了很多很多的工具。而工具多了又会出现新的问题:该选择哪个工具呢?我目前遵循着这样的实践
- 科学计算 使用 Conda/Pixi 管理环境。科学计算项目是典型的 混合栈,比如一个 Python 库通常要用 C++ 编译的二进制文件加速,并且还可能依赖特定版本的 CUDA 运行时。Conda/Pixi 对于这种多语言混合环境处理得最好。
- 应用开发 使用 Mise 管理环境。实际的应用项目普遍存在 多个独立的运行时,比如前端开发环境通常需要 NodeJS,后端通常需要 Go,一个项目甚至可能有多个运行时各不相同前端或后端。Mise 非常适合应对这种场景。
- 系统编程 使用 MSYS/WSL 管理环境。由于 C/C++ 历史包袱太严重,系统包管理器在某些时候充当了语言包管理器,因此像 MSYS/WSL 这样的环境有时会很方便。而对于 Rust/Zig 等更现代的语言,由于有更合理的工具链,因此通常不需要这么麻烦。
- 特殊情况 对于一些特殊情况,比如没有更好的工具可选,或者该语言的生态高度一体化(比如 .NET),我会选择官方的工具。
目前还没有提到以 Docker 为代表的容器工具。上述所有环境配置都可以只使用容器完成,不过前提是有人提供了能满足你所有需要的容器镜像。毕竟 复杂度不会消失,只能转移,如果没有人帮你解决环境配置的问题,那么你仍要自己面对这个恐怖的东西。
因此,尽管容器大概率就是环境管理的终极武器,但我还是会学习并使用各种环境管理工具。