首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PDM 现代Python包管理器入门教程

PDM 现代Python包管理器入门教程

原创
作者头像
用户11855672
发布2025-09-30 13:01:09
发布2025-09-30 13:01:09
2360
举报

前言

Python生态圈的包管理一直是个有趣的话题!长期以来,我们有pip、virtualenv、pipenv、poetry等工具,每个都有自己的特点和局限。而今天我要介绍的PDM(Python Development Master)是一个相对较新的包管理工具,它旨在提供一种更现代、更高效的Python项目依赖管理方式。

很多开发者可能会问:"又一个包管理器?我真的需要学习它吗?"(这是个好问题!)在这篇文章中,我将尝试解释PDM的独特优势,以及为什么它值得你花时间了解。

PDM是什么?

PDM是一个现代Python包管理工具,专注于依赖管理和虚拟环境处理。它的核心特性包括:

  1. 完全支持PEP 582(Python本地包目录)
  2. 快速依赖解析器
  3. 简单直观的命令行界面
  4. 兼容pyproject.toml(PEP 621)

对于那些已经熟悉Poetry或Pipenv的开发者来说,PDM提供了类似的功能,但有一些独特的设计选择让它脱颖而出。

为什么选择PDM?

在深入教程前,让我解释为什么PDM值得一试:

PEP 582支持

这可能是PDM最大的创新点!PEP 582引入了"pypackages"目录概念,允许每个项目在本地目录中存储其依赖项。这意味着你不需要创建或激活虚拟环境,Python解释器会自动从这个目录加载包。

这带来了两个主要好处: - 简化工作流程(不再需要记住激活虚拟环境) - 提高可移植性(项目及其依赖可以一起移动)

速度快

PDM使用了高效的依赖解析算法,比许多其他工具更快。在大型项目中,这种速度差异尤其明显。

兼容性好

PDM可以处理使用requirements.txt或setup.py的传统项目,也完全支持现代的pyproject.toml标准。这意味着你可以在新旧项目中都使用PDM。

安装PDM

安装PDM非常简单,有几种方法可以选择:

使用pip安装(最简单的方式)

bash pip install pdm

使用pipx安装(推荐方式)

如果你已经安装了pipx(一个用于安装和运行Python应用的工具),可以使用:

bash pipx install pdm

这种方式的好处是将PDM安装在独立的环境中,避免与系统Python包发生冲突。

使用安装脚本(适用于任何系统)

bash curl -sSL https://pdm.fming.dev/install-pdm.py | python3 -

安装完成后,可以通过以下命令验证安装:

bash pdm --version

PDM基本使用

让我们开始使用PDM创建一个新项目!

创建新项目

bash mkdir my-awesome-project cd my-awesome-project pdm init

执行pdm init后,PDM会向你提出一系列问题来配置项目:

  • 项目名称(默认为目录名)
  • 项目版本(默认为0.1.0)
  • 项目描述
  • 作者信息
  • 许可证
  • Python版本要求

回答这些问题后,PDM会在项目根目录下创建一个pyproject.toml文件,包含项目的基本信息和配置。

添加依赖

假设我们想在项目中使用Flask和requests库:

bash pdm add flask requests

PDM会解析依赖关系,并将这些包及其依赖项安装到项目的__pypackages__目录中。同时,它会更新pyproject.toml文件,添加这些依赖项。

如果你需要添加开发依赖(例如测试工具或linter),可以使用-d或--dev选项:

bash pdm add -d pytest black

安装依赖

如果你克隆了一个使用PDM的项目,可以简单地运行以下命令安装所有依赖项:

bash pdm install

这会读取pyproject.toml文件,并安装所有列出的依赖项。

运行脚本

PDM提供了一个方便的run命令,可以在项目环境中执行脚本:

bash pdm run python main.py

你也可以在pyproject.toml中定义自定义脚本:

toml [tool.pdm.scripts] start = "python main.py" test = "pytest tests/"

然后可以这样运行它们:

bash pdm run start pdm run test

这特别方便,因为你不需要记住复杂的命令参数或路径!

管理依赖

更新依赖

要更新项目的所有依赖项到最新版本,可以使用:

bash pdm update

如果只想更新特定的包:

bash pdm update flask

移除依赖

bash pdm remove flask

要移除开发依赖,同样使用-d选项:

bash pdm remove -d black

查看依赖

想了解项目的依赖树吗?使用pdm list命令:

bash pdm list

这会显示已安装的所有包及其版本。如果想查看完整的依赖关系树:

bash pdm list --tree

高级用法

锁定依赖版本

PDM使用pdm.lock文件来锁定依赖版本,确保在不同环境中安装相同版本的包。这对于生产环境的一致性非常重要!

当你运行pdm add、pdm remove或pdm update命令时,PDM会自动更新锁文件。

管理Python解释器

PDM可以管理项目使用的Python解释器版本。你可以使用pdm use命令指定特定的Python版本:

bash pdm use 3.9

这对于测试代码在不同Python版本下的兼容性特别有用。

发布包

如果你的项目是一个库,PDM可以帮助你构建和发布它:

bash pdm build

这会在dist/目录下创建源代码分发和wheel分发。

要发布到PyPI:

bash pdm publish

与其他工具的比较

PDM vs Poetry

  • PDM支持PEP 582,不需要激活虚拟环境
  • PDM的依赖解析通常更快
  • Poetry有更成熟的社区和生态系统

PDM vs Pipenv

  • PDM使用pyproject.toml而不是Pipfile
  • PDM支持开发依赖组
  • PDM的依赖解析更快

PDM vs pip+venv

  • PDM提供了更高级的依赖管理
  • PDM整合了环境管理和包管理
  • PDM有锁文件确保依赖一致性

实际案例:创建一个简单的Web应用

让我们通过创建一个简单的Flask应用来展示PDM的实际使用:

```bash mkdir flask-demo cd flask-demo pdm init

回答配置问题...

添加依赖

pdm add flask

创建应用文件

echo 'from flask import Flask

app = Flask(name)

@app.route("/") def hello(): return "Hello, PDM!"

if name == "main": app.run(debug=True)' > app.py

运行应用

pdm run python app.py ```

现在,你可以访问http://localhost:5000/查看你的应用了!

最佳实践

在使用PDM时,这里有一些建议:

  1. 始终使用锁文件:确保将pdm.lock文件纳入版本控制,这样团队成员会使用相同的依赖版本。
  2. 利用依赖组:将依赖分类到不同的组中,例如dev、test和docs,这样可以只安装必要的依赖: bash pdm add -G test pytest pytest-cov pdm install -G test
  3. 使用脚本简化工作流:在pyproject.toml中定义常用命令: toml [tool.pdm.scripts] start = "python app.py" test = "pytest" lint = "flake8"
  4. 定期更新依赖:使用pdm update保持依赖的更新,但在生产环境部署前要充分测试。

始终使用锁文件:确保将pdm.lock文件纳入版本控制,这样团队成员会使用相同的依赖版本。

利用依赖组:将依赖分类到不同的组中,例如dev、test和docs,这样可以只安装必要的依赖: bash pdm add -G test pytest pytest-cov pdm install -G test

使用脚本简化工作流:在pyproject.toml中定义常用命令: toml [tool.pdm.scripts] start = "python app.py" test = "pytest" lint = "flake8"

定期更新依赖:使用pdm update保持依赖的更新,但在生产环境部署前要充分测试。

常见问题解答

PDM与PEP 582的关系?

PDM是首批实现PEP 582的工具之一。虽然PEP 582目前仍是草案状态,但PDM通过一个特殊的引导程序使其工作,不需要等待Python解释器原生支持。

如何在CI/CD中使用PDM?

在CI/CD环境中,你可以使用以下命令安装PDM:

bash pip install pdm pdm install --no-self

然后使用pdm run执行你的测试或构建命令。

如何迁移现有项目到PDM?

PDM提供了从其他工具迁移的命令:

```bash

从Poetry迁移

pdm import poetry pyproject.toml

从Pipenv迁移

pdm import pipenv Pipfile

从requirements.txt迁移

pdm import requirements requirements.txt ```

结语

PDM是Python包管理生态系统中令人兴奋的新成员,它结合了现代标准和创新理念,提供了一种简化的依赖管理方法。

虽然它可能不适合所有项目(尤其是如果你已经有一个与其他工具配合良好的工作流程),但它的速度、简单性和对PEP 582的支持使它成为值得考虑的选择。

我鼓励你在下一个项目中尝试PDM,体验它如何简化你的Python开发工作流程。有时候,尝试新工具不仅能提高效率,还能带来新的思考方式!

如果你已经使用PDM,欢迎分享你的经验和技巧。Python生态系统的多样性是它的优势之一,每个工具都有其存在的理由和价值。

Happy coding!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • PDM是什么?
  • 为什么选择PDM?
    • PEP 582支持
    • 速度快
    • 兼容性好
  • 安装PDM
    • 使用pip安装(最简单的方式)
    • 使用pipx安装(推荐方式)
    • 使用安装脚本(适用于任何系统)
  • PDM基本使用
    • 创建新项目
    • 添加依赖
    • 安装依赖
    • 运行脚本
  • 管理依赖
    • 更新依赖
    • 移除依赖
    • 查看依赖
  • 高级用法
    • 锁定依赖版本
    • 管理Python解释器
    • 发布包
  • 与其他工具的比较
    • PDM vs Poetry
    • PDM vs Pipenv
    • PDM vs pip+venv
  • 实际案例:创建一个简单的Web应用
  • 回答配置问题...
  • 添加依赖
  • 创建应用文件
  • 运行应用
    • 最佳实践
    • 常见问题解答
      • PDM与PEP 582的关系?
      • 如何在CI/CD中使用PDM?
      • 如何迁移现有项目到PDM?
  • 从Poetry迁移
  • 从Pipenv迁移
  • 从requirements.txt迁移
    • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档