使用PDM管理Python虚拟环境

41 阅读2分钟

总览

类似于 Poetry,借助 PDM 可以解决 Python 环境依赖问题、管理依赖版本和管理虚拟环境。

PDM?

要记录 Python 环境所需依赖,最直接的方式是使用 requirements.txt。文件内容大概会长成这样:

torch --index-url https://download.pytorch.org/whl/cu124
numpy>=1.26.4
scipy
tqdm
pandas==2.2.2

不需要额外的操作,使用 pip install -r requirements.txt 就能从 requirements.txt 安装所有指定依赖。

但不同工程需要不同版本的依赖该怎么办?可以选择 PDM,为各个工程创建并管理新的虚拟环境。

除了管理虚拟环境依赖,PDM 还有自定义脚本、多虚拟环境仅安装一份依赖等功能。

安装

我习惯使用 pip 安装。

pip install --user pdm

就完成了,很直接。

简单使用

执行命令 pdm init,初始化项目。根据提示一步一步选择。

首先,会要求选择 Python 解释器,然后在当前目录创建虚拟环境 .venv。在配置完成后可以用 pdm use 修改解释器。若选择的解释器是 Conda 虚拟环境,则 PDM 会选择复用环境而不创建 .venv。

然后是工程名和工程版本。按需填写。

现在 PDM 会询问是否打算构建并发布工程(一般是指是否发布到 PyPI)。若选择是, PDM 会在 pyproject.toml 文件中添加名称、版本字段,以及一个 [build-system] 表格用于构建后端。此外,当运行 pdm installpdm sync 时库项目将被安装到环境中(除非指定 --no-self)。

最后指定 Python 版本需求。

现在可以愉快地使用 PDM 了。一些有用的指令:

  • pdm add,添加并安装某个依赖
  • pdm remove,删除某个依赖
  • pdm install,更新锁文件并安装依赖
    • pdm lock,更新锁文件
    • pdm sync,从锁文件安装依赖
  • pdm list,打印已安装依赖
  • pdm export -o requirements.txt,导出锁文件包含依赖

结合 git 版本管理

必须提交 pyproject.toml 文件,不应提交 .pdm-python 文件。推荐提交 pdm.lock 文件。

中央安装缓存

如果一个软件包被系统上的许多项目所需,每个项目都必须保留自己的副本,会很浪费磁盘空间。

PDM 支持通过将相同的 wheel 安装在集中式软件包存储库中,并在不同的项目中链接到该安装来缓存相同 wheel 的安装。

pdm config install.cache on

参考来源