好久不上 v2 Python 结果毫无意外地又看到问 Python 包管理的贴子。
我不爱当卖瓜的王婆,但必须承认,PDM 到今天四年多了,还是很遗憾,没能进入大多数人的视野之中。
不说太多了,重新列一下 PDM 比较值得用的几个 feature
pre_*
, post_*
钩子GitHub: https://github.com/pdm-project/pdm 文档: https://pdm-project.org
这几个可以说是超过 uv, poetry, rye 等时兴工具的地方。当然也有不如这几个的地方,比如性能。 所以我也只是列出来,给大家参考,不管是用 conda 生态还是 pypa 生态,找到最适合自己用的那个,才是最好的。适合你的不一定适合别人,反过来也是。
最后希望大家在问「该用什么 Python 包管理器」时,可以先搜索现存的贴子,毕竟这是个日经贴
1
NessajCN 232 天前
支持,虽然我在上一个 Python 包管理帖子里推荐了 uv ,
但我依然觉得 pdm 的设计也很不错(我几个包管理都试过,也都用在不同的项目里) 只是我比较偏爱 rust 带来的高速和类 cargo 体验(纯个人偏好,不代表 uv 和 pdm 本身的优劣对比) 另外说句私心的话,你要不用 Rust 把 pdm 重构一下( |
2
bianhui 232 天前
PDM 用了几年,其实诟病也挺多的,没有想象那么好。一段时间经常遇到卸载一个包导致整个 python 环境奔溃,没研究为啥。
后来用 rye 觉得挺舒服的,但是 bug 也很多,据说以后会废弃,迁移到 uv 上。 现在在用 uv ,感觉还在前期不是很成熟,很多功能不支持。 |
3
frostming OP |
4
NessajCN 232 天前
@frostming 确实,pdm 集成了环境管理,所以有相当多的功能是 uv 不具备的(不过它的后续 roadmap 有相关的集成计划)。
而 Python 这种需要切环境并根据环境管理依赖和包的麻烦操作是 Python 作为解释型语言的先天不足, uv 选择专注包管理,把切环境的工作先交给其他工具(当然它本身有个 uv venv 生成个默认环境) 你的 pdm 选择一把抓 这里面两种选择都是可以理解的 在上个帖子里帖主问的是「包管理工具」,所以我就仅从包管理的体验来说推荐了 uv 如果提问的是「环境管理+包管理」,那我应该就会推荐你的 pdm 了 当然还有一个考虑就是对于还需要提问包管理工具的新手,一般也不太会用到复杂的环境管理,有个系统默认的最新版解释器够用了。所以这种前提下我认为推荐 uv 也是合理的 |
5
kuanat 232 天前
PDM 真的很棒,我上次看到作者的回复,想赞美一下 PDM 结果打成 PNPM 了……
对于非专业人士和初学者,我还是会推荐 PDM 的。原因一是基于 Python 生态及现有标准,又比 pip 方便友好,二是成熟项目基本不会踩坑了。 从趋势来看,随着 AI 的兴起,这些年“包管理”这个概念慢慢在向“工程管理”方向转变。生态层面上,就看 uv 能不能统一 Python 工具链了,在这个背景下,独立的包管理工具可能会慢慢淡出视线。 另外 conda 的思路也不一样,我个人认为它更接近于 docker build 这种重建。 就同楼主说的一样,专业人员肯定是要考虑实际需求做选择的。 |
6
noahlias 232 天前
让我想起了年初看的一篇文章
https://chriswarrick.com/blog/2024/01/15/python-packaging-one-year-later/ 加上之前看过的 https://alpopkes.com/posts/python/packaging_tools/ 基本介绍了 python 的包管理的复杂生态和一些令人诟病的地方 我觉得官方没有下手也是主要原因, go/rust 这些官方的包管理工具哪个不比 python 的好(手动🐶 |
7
hellojay 232 天前
PDM 还是非常好用的!支持一把
|
8
encro 232 天前
pdm 用了很久了,大概 2 年?
还有很多不足,但是体验确实做得不错。。。 uv 现在最大问题是还不支持镜像!!!! |
9
selfeasy 232 天前
➜ ~ pdm py install 3.9
[InstallationError]: Installation failed WARNING: Add '-v' to see the detailed traceback 安装 python 解释器报错,这个需要怎么解决? |
10
shijingshijing 232 天前 1
不错,算是 Python 包管理中的佼佼者。
PS:下次宣传不要提 npm ,pnpm 也不行,这是 debuff 。直接说采用创新的库链接缓存,一个版本只存一次。 |
11
lanlanye 232 天前
挺好的,当初从 poetry 切到 pdm 主要是图一个 `pip install .[test]` ,毕竟我不想在每个环境下都先安装 poetry
|
12
coolcoffee 232 天前
感觉我 pdm 用的不太对,我现在只是拿它记录依赖避免掉弱智的 pip freeze > requirements.txt ,但是安装完还需要 pip 再安装一遍,因为 pycharm 貌似不识别 pdm 安装的依赖。
隔离环境我还是习惯用 conda 。 |
13
forblackking 232 天前
支持下,最早还是因为尝试 PEP582 用的 PDM ,不觉间用到现在了
|
14
tabris17 232 天前
pdm global install 的 python 工具不在当前 PATH 路径里,不像 rye 那样,全局安装后可以直接再命令行里调用
|
15
makerbi 232 天前
两年前开始我的项目都用 PDM 管理了,支持一个
|
16
Lychee0 232 天前 1
字词! 2 、3 真的超棒,体验拉满了👍
可惜不能直接用 local env ,最近改用 poetry ,没有这些 feature 确实很难受😣 |
17
0x0x0x0 232 天前
pdm 感觉对初学者挺友好的
|
18
vincentqiao 217 天前 via iPhone 1
作为初学者必须讲一句,pdm 真的很好用,
|
19
ewfian 204 天前
pdm 完全就是 npm 的那一套思路,非常好用。
但是感觉性能还可以再提升下,安装依赖非常慢,下载进度好像也不太对,感觉比 pip 慢很多。 pip 有一个下载进度,看着就有预期,但是 pdm 一直转圈就不知道是卡死了还是怎么回事,尤其是安装比较大的包的时候尤其难受 |
20
ewfian 204 天前
还有一个缓存的问题,感觉 pip 有一个全局缓存,安装已经装过的包就很快,但是 pdm 好像大部分都是重新下载
|