有一个包管理器叫 PDM,已经四年多了

2024-04-15 11:03:40 +08:00
 frostming

好久不上 v2 Python 结果毫无意外地又看到问 Python 包管理的贴子。

我不爱当卖瓜的王婆,但必须承认,PDM 到今天四年多了,还是很遗憾,没能进入大多数人的视野之中。

不说太多了,重新列一下 PDM 比较值得用的几个 feature

  1. 插件系统,可以很方便地增加自定义的命令或配置。
  2. pnpm 式库链接缓存,节省磁盘空间
  3. pdm scripts ,支持各种 pre_*, post_* 钩子
  4. 支持安装 Python 版本

GitHub: https://github.com/pdm-project/pdm 文档: https://pdm-project.org

这几个可以说是超过 uv, poetry, rye 等时兴工具的地方。当然也有不如这几个的地方,比如性能。 所以我也只是列出来,给大家参考,不管是用 conda 生态还是 pypa 生态,找到最适合自己用的那个,才是最好的。适合你的不一定适合别人,反过来也是。

最后希望大家在问「该用什么 Python 包管理器」时,可以先搜索现存的贴子,毕竟这是个日经贴

6609 次点击
所在节点    Python
20 条回复
NessajCN
2024-04-15 11:14:19 +08:00
支持,虽然我在上一个 Python 包管理帖子里推荐了 uv ,
但我依然觉得 pdm 的设计也很不错(我几个包管理都试过,也都用在不同的项目里)
只是我比较偏爱 rust 带来的高速和类 cargo 体验(纯个人偏好,不代表 uv 和 pdm 本身的优劣对比)

另外说句私心的话,你要不用 Rust 把 pdm 重构一下(
bianhui
2024-04-15 11:14:50 +08:00
PDM 用了几年,其实诟病也挺多的,没有想象那么好。一段时间经常遇到卸载一个包导致整个 python 环境奔溃,没研究为啥。
后来用 rye 觉得挺舒服的,但是 bug 也很多,据说以后会废弃,迁移到 uv 上。
现在在用 uv ,感觉还在前期不是很成熟,很多功能不支持。
frostming
2024-04-15 11:22:33 +08:00
@NessajCN
@bianhui

如果觉得 rust 写的那几个舒服,说明你看重的是它们有的那些优势,而它们缺乏的东西,比如说跨环境 lockfile 你们用不到。这很正常。

所以还是那句话,看到推荐或不推荐的评论时,要想想适合不适合自己。这也是为什么我觉得问用哪个 Python 包管理器这种帖子没有任何意义。
NessajCN
2024-04-15 11:52:38 +08:00
@frostming 确实,pdm 集成了环境管理,所以有相当多的功能是 uv 不具备的(不过它的后续 roadmap 有相关的集成计划)。
而 Python 这种需要切环境并根据环境管理依赖和包的麻烦操作是 Python 作为解释型语言的先天不足,
uv 选择专注包管理,把切环境的工作先交给其他工具(当然它本身有个 uv venv 生成个默认环境)
你的 pdm 选择一把抓
这里面两种选择都是可以理解的
在上个帖子里帖主问的是「包管理工具」,所以我就仅从包管理的体验来说推荐了 uv
如果提问的是「环境管理+包管理」,那我应该就会推荐你的 pdm 了

当然还有一个考虑就是对于还需要提问包管理工具的新手,一般也不太会用到复杂的环境管理,有个系统默认的最新版解释器够用了。所以这种前提下我认为推荐 uv 也是合理的
kuanat
2024-04-15 14:16:06 +08:00
PDM 真的很棒,我上次看到作者的回复,想赞美一下 PDM 结果打成 PNPM 了……

对于非专业人士和初学者,我还是会推荐 PDM 的。原因一是基于 Python 生态及现有标准,又比 pip 方便友好,二是成熟项目基本不会踩坑了。


从趋势来看,随着 AI 的兴起,这些年“包管理”这个概念慢慢在向“工程管理”方向转变。生态层面上,就看 uv 能不能统一 Python 工具链了,在这个背景下,独立的包管理工具可能会慢慢淡出视线。

另外 conda 的思路也不一样,我个人认为它更接近于 docker build 这种重建。

就同楼主说的一样,专业人员肯定是要考虑实际需求做选择的。
noahlias
2024-04-15 14:16:22 +08:00
让我想起了年初看的一篇文章
https://chriswarrick.com/blog/2024/01/15/python-packaging-one-year-later/
加上之前看过的 https://alpopkes.com/posts/python/packaging_tools/
基本介绍了 python 的包管理的复杂生态和一些令人诟病的地方

我觉得官方没有下手也是主要原因, go/rust 这些官方的包管理工具哪个不比 python 的好(手动🐶
hellojay
2024-04-15 14:22:12 +08:00
PDM 还是非常好用的!支持一把
encro
2024-04-15 14:24:21 +08:00
pdm 用了很久了,大概 2 年?
还有很多不足,但是体验确实做得不错。。。

uv 现在最大问题是还不支持镜像!!!!
selfeasy
2024-04-15 14:52:27 +08:00
➜ ~ pdm py install 3.9
[InstallationError]: Installation failed
WARNING: Add '-v' to see the detailed traceback

安装 python 解释器报错,这个需要怎么解决?
shijingshijing
2024-04-15 14:55:57 +08:00
不错,算是 Python 包管理中的佼佼者。

PS:下次宣传不要提 npm ,pnpm 也不行,这是 debuff 。直接说采用创新的库链接缓存,一个版本只存一次。
lanlanye
2024-04-15 15:09:28 +08:00
挺好的,当初从 poetry 切到 pdm 主要是图一个 `pip install .[test]` ,毕竟我不想在每个环境下都先安装 poetry
coolcoffee
2024-04-15 17:14:21 +08:00
感觉我 pdm 用的不太对,我现在只是拿它记录依赖避免掉弱智的 pip freeze > requirements.txt ,但是安装完还需要 pip 再安装一遍,因为 pycharm 貌似不识别 pdm 安装的依赖。

隔离环境我还是习惯用 conda 。
forblackking
2024-04-15 17:17:45 +08:00
支持下,最早还是因为尝试 PEP582 用的 PDM ,不觉间用到现在了
tabris17
2024-04-15 17:21:57 +08:00
pdm global install 的 python 工具不在当前 PATH 路径里,不像 rye 那样,全局安装后可以直接再命令行里调用
makerbi
2024-04-15 17:50:03 +08:00
两年前开始我的项目都用 PDM 管理了,支持一个
Lychee0
2024-04-15 23:15:41 +08:00
字词! 2 、3 真的超棒,体验拉满了👍
可惜不能直接用 local env ,最近改用 poetry ,没有这些 feature 确实很难受😣
0x0x0x0
2024-04-16 00:21:08 +08:00
pdm 感觉对初学者挺友好的
vincentqiao
2024-04-30 21:09:17 +08:00
作为初学者必须讲一句,pdm 真的很好用,
ewfian
2024-05-13 13:37:49 +08:00
pdm 完全就是 npm 的那一套思路,非常好用。

但是感觉性能还可以再提升下,安装依赖非常慢,下载进度好像也不太对,感觉比 pip 慢很多。
pip 有一个下载进度,看着就有预期,但是 pdm 一直转圈就不知道是卡死了还是怎么回事,尤其是安装比较大的包的时候尤其难受
ewfian
2024-05-13 13:40:03 +08:00
还有一个缓存的问题,感觉 pip 有一个全局缓存,安装已经装过的包就很快,但是 pdm 好像大部分都是重新下载

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1032549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX