探索 PDM:新一代的 Python 包管理工具

PDM(Python Development Master)是一款新一代的 Python 包管理工具,旨在提供更为现代化、可靠且灵活的解决方案。与传统的 pip 和 Poetry 相比,PDM 在依赖版本管理、项目隔离和性能优化等方面展现出独特的优势。

PDM 强调了可靠性和稳定性,通过精细的依赖版本锁定机制,确保项目的可复现性。支持 PEP 582,PDM 将依赖包安装到项目目录,实现了更为灵活的项目级别依赖隔离。此外,PDM 使用本地缓存管理已下载的依赖,避免了重复下载,提高了依赖安装的效率。

在工作原理方面,PDM 通过虚拟环境隔离项目的依赖,并支持在项目目录下的 .pdm 文件夹中安装依赖,为项目提供了更加清晰和可维护的结构。

通过本文详细的介绍,可以更好地了解 PDM 的特性和优势,为其在实际项目中的应用提供指导。作为 Python 包管理领域的新秀,PDM 有望在未来成为开发者首选的工具之一,推动整个生态系统的进步。

PDM 的背景和动机

Python 包管理领域一直在不断演进,而PDM的诞生则是为了迎接新时代的挑战并提供更为现代化的解决方案。以下是PDM背景和动机的详细介绍:

1. 对现有包管理工具的反思

PDM的诞生并非偶然,而是对当前包管理工具存在的一系列问题和限制的深刻反思。例如,传统的pip在处理依赖关系和虚拟环境时可能显得不够灵活,而PDM正是为了解决这些问题而设计的。

2. 强调可靠性和稳定性

PDM注重可靠性和稳定性,旨在提供一个更加可靠的包管理环境。通过对各种边缘情况和实际项目的深入测试,PDM力求确保用户的依赖关系和项目环境的安全性。

3. 提升性能

性能一直是开发者关心的焦点之一。PDM通过优化依赖解析和安装过程,力求提供更快速的包管理体验。这种性能优化对于大型项目和持续集成环境尤为重要。

4. 更现代的依赖管理

PDM引入了更现代的依赖管理概念,允许精确地锁定依赖的版本,从而确保项目在不同环境中的可复现性。这种精确性是在协作开发和部署过程中尤为重要的。

5. 支持 PEP 582(PEP 581的改进版)

PDM的设计理念之一是支持 PEP 582,即通过本地缓存提高导入性能。这种支持有助于在开发过程中加速导入操作,提高项目整体的运行效率。

PDM 的安装与初始化

在这一部分,将学习如何安装 PDM 并初始化一个 Python 项目。以下是详细的步骤和示例代码:

1. 安装 PDM

首先,需要通过 pip 安装 PDM。打开你的命令行工具,运行以下命令:

pip install pdm

这将会下载并安装最新版本的 PDM 到你的 Python 环境中。

2. 初始化 Python 项目

一旦 PDM 安装完成,可以使用 pdm init 命令来初始化一个新的 Python 项目。这将会创建一个 pyproject.toml 文件,用于存储项目的配置信息。

pdm init

在初始化过程中,PDM 将询问一些基本的项目信息,例如项目名称、版本等。可以根据需要进行配置,或者直接按回车键使用默认值。

3. 示例代码

以下是一个简单的示例,演示了 PDM 的安装和初始化过程:

# 安装 PDM
pip install pdm

# 初始化 Python 项目
pdm init

安装完成后,将看到类似以下的输出:

Creating pyproject.toml...
PDM project has been successfully initialized!

至此,已成功安装 PDM 并初始化了一个 Python 项目。

依赖管理与虚拟环境

PDM 强调了灵活性和可定制性,使得依赖管理和虚拟环境的使用变得更为便捷。以下是一个详细的示例,演示如何在 PDM 中进行依赖管理和虚拟环境的操作。

1. 添加依赖

使用 pdm add 命令可以向项目中添加依赖。例如,要添加 requests 这个库作为项目的依赖:

pdm add requests

这会将 requests 添加到项目的 pyproject.toml 文件中,并触发 PDM 开始安装依赖。

2. 安装依赖

使用 pdm install 命令安装项目中的所有依赖:

pdm install

PDM 将会根据 pyproject.toml 中的配置信息,安装指定版本的依赖到虚拟环境中。

3. 查看依赖

通过 pdm list 命令,可以查看当前项目中已安装的依赖及其版本信息:

pdm list

4. 创建虚拟环境

PDM 使用虚拟环境来隔离项目的依赖。通过 pdm run 命令可以在虚拟环境中运行 Python 解释器,执行项目中的脚本:

pdm run python your_script.py

5. 示例代码

下面是一个整体的示例代码,演示了如何添加依赖、安装依赖、查看依赖和运行脚本:

# 添加依赖
pdm add requests

# 安装依赖
pdm install

# 查看依赖
pdm list

# 在虚拟环境中运行脚本
pdm run python your_script.py

通过以上步骤,成功地进行了依赖管理并创建了虚拟环境。这可以更加灵活地控制项目的依赖关系,确保项目的稳定性和可维护性。

锁定依赖版本

PDM 提供了强大的依赖版本控制机制,允许精确锁定依赖的确切版本,确保项目的可复现性。以下是一个详细的示例,演示如何在 PDM 中锁定依赖的版本。

1. 添加并锁定依赖版本

通过 pdm add 命令添加依赖,并通过 == 运算符指定确切的版本号,然后使用 pdm lock 命令锁定依赖的版本:

pdm add Flask==2.0.1
pdm lock

这会将 Flask 添加到项目的 pyproject.toml 文件中,并生成 pdm.lock 文件,其中包含确切的版本信息。

2. 查看锁定的依赖版本

通过 pdm list 命令,可以查看当前项目中已安装的依赖及其确切的版本信息:

pdm list

3. 示例代码

下面是一个完整的示例代码,演示了如何添加并锁定依赖版本:

# 添加依赖并锁定版本
pdm add Flask==2.0.1
pdm lock

# 查看已安装的依赖
pdm list

通过以上步骤,成功地添加了依赖并锁定了其确切版本,确保了项目的可复现性。这种精确的版本控制对于协作开发和在不同环境中部署项目至关重要。

PDM 的工作原理

深入了解 PDM 的工作原理有助于理解它是如何管理依赖、构建虚拟环境以及提供快速导入的。以下是 PDM 的工作原理以及对 PEP 582 的支持的详细解释,通过示例代码和图表来阐述这些概念。

1. 虚拟环境和依赖管理

PDM 通过虚拟环境来隔离项目的依赖。每个项目都有自己的虚拟环境,其中包含该项目所需的所有依赖包。这确保了项目之间的独立性,防止依赖冲突。

2. PEP 582 的支持

PDM 支持 PEP 582,这意味着它可以将依赖包安装到项目目录下的 .pdm 文件夹中,而不是全局安装。这种方式提高了项目的可移植性和一致性。

3. 本地缓存

PDM 使用本地缓存来存储已下载的依赖包。这个本地缓存位于项目目录下的 .pdm-cache 文件夹中。通过本地缓存,PDM 可以避免重复下载相同版本的依赖,提高了依赖安装的效率。

4. 示例代码

以下是一些示例代码,演示了 PDM 的工作原理:

# 创建虚拟环境并安装依赖
pdm install

# 查看本地缓存
ls .pdm-cache

# 查看虚拟环境
ls .pdm/venv

# 运行 Python 解释器,导入项目依赖
pdm run python -c "import requests"

通过以上代码,可以更好地理解 PDM 是如何通过虚拟环境、本地缓存以及对 PEP 582 的支持来管理项目的依赖和提供快速导入的。这些机制使得 PDM 在依赖管理和项目隔离方面表现出色。

与其他包管理工具的比较

PDM 作为新一代的 Python 包管理工具,与传统的 pip 和 Poetry 相比,具有一些独特的优势。以下是对比以及通过示例代码突出 PDM 的优势:

1. 依赖版本管理

PDM: PDM 提供了更精细的依赖版本管理机制,允许锁定确切的依赖版本,确保项目的可复现性。

pdm add requests==2.26.0
pdm lock

pip: pip 也支持版本锁定,但可能相对繁琐,需要手动编辑 requirements.txt 文件。

pip install requests==2.26.0

Poetry: Poetry 通过 poetry add 命令添加依赖,然后通过 poetry install 安装,但版本锁定的语法较为独特。

poetry add requests@2.26.0

2. PEP 582 的支持

PDM: PDM 支持 PEP 582,将依赖安装到项目目录下的 .pdm 文件夹中,实现了项目级别的依赖隔离。

ls .pdm/venv

pip: pip 安装依赖通常是全局的,需要额外的虚拟环境管理。

python -m venv venv
source venv/bin/activate
pip install requests

Poetry: Poetry 通过虚拟环境进行依赖隔离,但全局安装 Poetry 本身可能影响其他项目。

poetry install

3. 本地缓存

PDM: PDM 使用本地缓存管理已下载的依赖,避免重复下载,提高了依赖安装的效率。

ls .pdm-cache

pip: pip 也有缓存,但可能分散在用户目录下,不够集中。

ls ~/.cache/pip

Poetry: Poetry 也有缓存,位于用户目录下。

ls ~/.cache/pypoetry

总结

在本文中,深入探讨了 PDM 作为新一代 Python 包管理工具的各项特性。从安装与初始化、依赖管理、锁定版本,到工作原理和与其他工具的比较,详细介绍了 PDM 的优势。PDM 通过灵活的依赖版本管理、PEP 582 的支持以及本地缓存等机制,为开发者提供了更为可靠、高效的包管理体验。

相比于传统的 pip 和 Poetry,PDM 在依赖隔离、版本控制和性能优化等方面表现出色。通过示例代码和清晰的对比,读者可以更好地理解 PDM 的使用方法和其在实际项目中的优势。总体而言,PDM 在不断演进的 Python 生态中扮演着重要的角色,为开发者提供了更为现代、灵活的包管理解决方案。希望本文能够激发读者对 PDM 的兴趣,并在实际项目中体验其强大功能。


如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值