阅读本文大致需要 5 分钟。
提要
哈喽,大家好!说起Python,就不得不讲讲它的环境管理机制,真是资深工程师听了都流泪。由于可选的工具、方法实在是太多了(Pip, venv, virtualenv, pyenv, pipenv, micropipenv, pip-tools, conda, miniconda, mamba, micromamba, poetry, hatch, pdm, pyflow),完全搞不清楚该用哪个好么
。
TL;DR
别用那些乱七八糟的工具了,安装 mambaforge,用 mamba 安装软件包,最快、最靠谱、最安逸!
一、Python环境?虚拟环境?
由于不同的Python项目对其运行环境有不同的要求,可能:
-
对依赖的Python有不同的版本要求;(例如:老项目A是用Python2开发的,目前运行也很正常,不再打算投尽力升级了;而新项目B、C、D都采用Python3开发;)
-
对依赖的同一个软件有不同的版本要求;(例如:项目E和F都是用Python3开发,但它们依赖了LibA的不同版本(V1和V2),两个项目目前都能正常运行,目前也不敢贸然将LibA都升级为同一个版本(V3),还需要全面测试,太麻烦)
-
其[依赖的软件]所需的依赖有不同的版本要求;(例如:这是完全不可预料的,我怎么会知道我依赖的这些软件包,又需要别的哪些依赖….)
简单说,虚拟环境用于提供项目级的Python环境隔离,避免项目间的依赖冲突。

二、为什么说 Mambaforge 最靠谱?
虽然这么说有点绝对(毕竟没有什么软件是最靠谱的…
),但是但是但是!对于还尚未形成符合自己偏好的Python环境管理方式的Pythoner,或者还没玩清楚虚拟环境的Pythoner, 或者Python初学者来说,我推荐用 Mambaforge。
由于 Mambaforge 能给你提供这些东西:
-
一个精简版Python解释器(mambaforge)
-
一个虚拟环境管理器(`mamba env`)
-
一个包管理器(`mamba install`)
-
一个快速的依赖解析器(比conda的解析器快了不止一点半点)
-
一个包含海量软件包的生态(conda-forge channel)
-
一个庞大的开发者社区(有大佬持续维护,未来有保障、可靠!)
-
跨平台支持(Linux/Mac/Windows)
-
多CPU架构支持(
x86_64/ppc64le/aarch64/Apple M1)
三、Mambaforge 最佳实践
3.1. 安装 mambarforge
从官方仓库(
https://github.com/conda-forge/miniforge/releases)下载安装包,并安装。


3.2. 使用 mamba create 创建环境
# 创建名为 bayes_mle 的 Python 环境mamba create -n bayes_mle

3.3. 切换当前环境

3.4. 使用 mamba install 安装依赖
# 使用 mamba 安装 numpymamba install numpy



四、Python管理工具野史
虽然我强烈安利的是 mambaforge,但我觉着还是有必要给大家讲一讲,Python 的众多管理工具(Pip, venv, virtualenv, pyenv, pipenv, micropipenv, pip-tools, conda, miniconda, mamba, micromamba, poetry, hatch, pdm, pyflow)的发展脉络是怎样的,以及 mambaforge 是如何脱颖而出的。
-
`Python` 诞生了
-
虽然 `Python` 很好,但是我需要用外部工具 –> `pip`
-
虽然 `pip` 很好,但是对于同一个库,我需要同时安装多个版本 –> `venv、virtualenv`
-
虽然 `virtualenv` 很好,但是我需要同时安装多个版本的Python –> `pyenv`
-
虽然 `virtualenv 和 pyenv` 很好,但是我都合二为一 –> `pyenv-virtualenv`
-
虽然 `虚拟环境` 很好,但是我想明确我的依赖关系,方便我重新构建环境 –> `pip freeze > requirements.txt`
-
虽然 `能明确依赖关系` 很好,但是我只想把我项目中的直接依赖找出来 –> `pip-compile, conda-lock`
-
虽然 `虚拟环境` 很好,但是我想让这个虚拟环境以项目为单位生效 –> `pipenv`
-
虽然 pipenv` 很好,但是我想让它轻量化一点 –> `micropipenv`
-
虽然 pipenv` 很好,但是我平时开发的不是普通应用,而是组件库 –> `poetry`
-
虽然 上面说的这些 都很好,但是我还有依赖非Python库的需求 –> `conda`
-
虽然 `conda` 很好,但是依赖解析也太慢了 –> `mamba`
-
虽然 `conda` 很好,但是我们普通用户也应该能向这个生态贡献组件库 –> `conda-forge`
-
虽然 `conda 和 conda-forge` 的确 很好,但是最好有个东西能把它们提前打包在一起,方便我使用 –> `miniforge`
-
虽然 `miniforge` 很好,但是我想用 mamba 替换掉 conda,加快解析速度 –> `mambaforge`
参考:
Managing Python Environments in 2022 (for the 99%):
https://aseifert.com/p/python-environments/
conda-forge/miniforge:
https://github.com/conda-forge/miniforge/releases






