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

31 天前
 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 包管理器」时,可以先搜索现存的贴子,毕竟这是个日经贴

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

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

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

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

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

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


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

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

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

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

uv 现在最大问题是还不支持镜像!!!!
selfeasy
31 天前
➜ ~ pdm py install 3.9
[InstallationError]: Installation failed
WARNING: Add '-v' to see the detailed traceback

安装 python 解释器报错,这个需要怎么解决?
shijingshijing
31 天前
不错,算是 Python 包管理中的佼佼者。

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

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

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

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

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

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

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

© 2021 V2EX