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