Python 管理版本和包

1 pip 官方包管理工具

官方文档

常用指令:

pip install sampleproject
pip install sampleproject==1.0.4 # 指定版本
pip install 'SomePackage>=1.0.4' # 指定最低版本

# 不同类型的安装:url/本地压缩包/本地whl文件
pip install git+https://github.com/pypa/sampleproject.git@main
pip install sampleproject-1.0.tar.gz
pip install sampleproject-1.0-py3-none-any.whl

pip install -r requirements.txt # 批量安装
pip install --upgrade sampleproject # 升级
pip uninstall sampleproject # 卸载

# 离线安装
pip wheel --wheel-dir DIR -r requirements.txt # 先打包,再安装
pip install --no-index --find-links=DIR -r requirements.txt

其他参数或指令:

  • --proxy:使用代理服务器
  • -c constraints.txt:约束版本(不会安装)
  • pip list:查看已安装包的列表
  • pip search "query":搜索已安装包的列表
  • --upgrade-strategy:升级包时的策略(默认是非必要不升级)

2 venv 官方虚拟环境管理

官方文档

虚拟环境:包含支持一个项目/软件所需的特定 Python 解释器、软件库和二进制文件

venv模块支持创建轻量的“虚拟环境”

  • 每个虚拟环境将拥有它们自己独立的安装在其 site 目录中的 Python 包集合
  • 在虚拟环境中,可选择使用基础环境中的软件包,也可以单独隔离安装所需的软件包
# 执行venv指令来创建一个虚拟环境:
python -m venv /path/to/new/virtual/environment

3 virtualenv 虚拟环境管理

virtualenv 的部分功能子集已集成到了官方venv模块中

官方文档

virtualenv env_name # 创建虚拟环境(对应一个新文件夹)
source env_name/bin/activate # 激活虚拟环境 linux/mac
.\env_name\Scripts\activate # 激活虚拟环境 windows
deactivate # 停用虚拟环境

4 pipenv 附带虚拟环境的包管理

pipenv 相当于 pip 和 virtualenv的组合

官方文档

virtualenv venv # 创建虚拟环境
pipenv run # 在虚拟环境中运行命令
pipenv shell # 激活虚拟环境并返回shell

pipenv install/uninstall/update # 安装/卸载/升级包
pipenv graph # 显示当前安装的依赖关系图
pipenv lock # 生成 Pipfile.lock
pipenv requirements # 生成 requirements

pipenv 使用的 Pipfile.lock 替换了大多数 Python 项目中使用的 requirements.txt 文件,并增加了跟踪上次锁定的包哈希的安全优势。该文件通过锁定操作自动管理

5 pyenv 灵活切换Python版本

pyenv 进行 Python 版本选择的顺序

  • 优先级最高的是环境变量PYENV_VERSION,其次是当前目录的.python-version 文件
  • 再其次是父目录下搜索到的第一个.python-version 文件,最后是全局配置文件
pyenv install 3.10.4 # 下载并安装 Python 3.10.4
pyenv global 3.10 # 下载并进行全局安装
pyenv uninstall 3.10.4 # 卸载 Python 3.10.4

pyenv local xxx # 指定Python版本/生成.python-version文件
pyenv global xxx # 指定Python版本/修改全局配置文件

6 Poetry 依赖管理和打包工具

官方文档

Poetry 允许您声明您的项目所依赖的库,并且它将为您管理(安装/更新)它们。 Poetry 提供了一个锁定文件来确保可重复安装,并可以构建您的项目以进行分发。Poetry 需要 Python 3.8+

poetry new poetry-demo # 创建新项目
poetry init # 初始化一个已存在的项目
# pyproject.toml 文件是项目中最重要的文件,用于编排项目及其依赖项

poetry add pendulum # 添加新模块(自动满足约束和依赖)
poetry run xxx # 在虚拟环境中执行命令
poetry shell # 激活虚拟环境
poetry install # 安装预定义的项目依赖
# 完成安装后,完整依赖会写入poetry.lock 文件
# 开发人员应提交 `poetry.lock` 以获得更具可重复性的构建

7 Hatch 可扩展的 Python 包管理器

官方文档

Hatch 也可以管理环境(它允许每个项目有多个环境,但不允许把它们放在项目目录中),并且可以管理包(但不支持 lockfile)

hatch new "Hatch Demo" # 创建新项目
hatch new --init # 初始化一个已存在的项目
# `pyproject.toml` 文件中定义许可证、Python版本和依赖

hatch env create # 创建环境
hatch shell # 进入环境
hatch run # 在环境内执行命令

8 PDM 现代的 Python 包管理器

官方文档

PDM 旨在成为下一代 Python 软件包(仅支持 Python≥3.8)管理工具

  • PDM 也可以像 Pipenv 那样在项目或集中的位置管理 venvs。它从一个标准化的 pyproject.toml 文件中读取项目元数据,并支持 lockfile。
  • 用户可以在插件中添加更多的功能,并将其作为一个发行版上传,以供分享。
  • 此外,与 Poetry 和 Hatch 不同,PDM 并没有被和一个特定的构建后端绑定
pdm init # 项目初始化
pdm add requests flask # 添加依赖

9 Rye 实验性包管理方案

目前只是实验性工具,作者暂不推荐生产环境中使用

官方文档

Rye 能安装和管理 Python 安装,帮助处理 pyproject.toml 文件,安装和卸载依赖项,在幕后创建和更新 virtualenvs。它支持 monorepos 和全局工具安装

rye init my-project # 项目初始化
rye pin 3.10 # 更改Python版本
rye add "flask>=2.0" # 添加依赖
rye remove flask # 删除依赖

rye add black # 添加可执行文件
rye sync # 同步更新(锁定文件并写入lock文件)

. .venv/bin/activate # 激活虚拟环境(unix)
.venv\Scripts\activate # 激活虚拟环境(windows)
rye run black # 在虚拟环境内执行脚本
deactivate # 停用虚拟环境

往年同期文章