Python 的版本和包管理系统
Python 构建相关工具主要包含三个部分:
- 版本管理
- 虚拟环境管理
- 包依赖管理
其实很多工具并不只有一个功能,比如 Poetry 既可以管理依赖,也可以管理虚拟环境。Conda 是及三个功能于一身的。
版本管理
版本管理主要是用来管理同一个机器上的不同的 Python 解释器,每一个版本的解释器都可以产生独立的虚拟环境和包依赖。
这里我建议使用:pyenv: Simple Python version management。
pyenv 支持主流操作系统,除了支持 CPython 的各大主流版本,还支持其他的 Python 实现,比如 Pypy。
虚拟环境管理
虚拟环境其实就是某一个 Python 版本 + 定制化的依赖。比如 env-1
是 Python 3.11 + numpy + pandas,而 env-2
是 Python 3.12 + networkx,而 env-3
是 pypy 3.10 + numpy + pandas。这其中 env-1
, env-2
, env-3
就是三个完全独立的 Python 执行环境。他们有不同版本的 Python 解释器,安装有不同的包,而且这些包的版本可能也是不一样的。
为什么需要不同的环境呢?其中一个比较重要用途就是确保包的版本不会存在冲突,因为一般每一个 Python 项目的依赖都不尽相同,如果要开发不同的项目,就需要不同的虚拟环境。另外,如果每个项目有独立的虚拟化环境配置,在打包 Docker 运行的时候,也会非常轻松。
虚拟环境管理的工具推荐:
pyenv-virtualenv,这是 pyenv 的一个插件,安装以后可以直接通过 pyenv virtualenv 3.11 env-1
创建特定版本的 Python 虚拟环境。
它不仅可以管理 pyenv 的 Python 版本,还可以通过 Pyenv 管理 Conda 的环境。
包依赖管理
Python 有几个主要的包源:
- PyPI Python Package Index
- Conda Package, dependency and environment management for any language
- Conda-Forge
目前 PyPI 还是最主要的 Python 库的源,而 Conda 则更加适合机器学习、数据科学的库,或者一些需要混合编程场景,比如 C++,CUDA 这种。
相应的 pip 和 conda 是两个主要的依赖管理器。需要指出,pip 在依赖管理方面非常弱,可能会出现冲突。
这里推荐两个包管理工具:
- Poetry - Poetry is a tool for dependency management and packaging in Python
- MiniConda - Miniconda is a free minimal installer for conda
Poetry 的依赖解决更迅速,因为它是一个 Python 的包管理器,而 Conda 则不光是 Python 管理,这也是为什么在一些机器学习库的安装和管理上 Conda 更胜一筹,因为很多库都是不同语言的依赖。
不过,Poetry 是一个比较好开始的工具,如果发现不能安装的库,在考虑 Conda。