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