V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
frostming
V2EX  ›  Python

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

  •  
  •   frostming ·
    frostming · 2024-04-15 11:03:40 +08:00 · 6115 次点击
    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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


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

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

    就同楼主说的一样,专业人员肯定是要考虑实际需求做选择的。
    noahlias
        6
    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
        7
    hellojay  
       2024-04-15 14:22:12 +08:00
    PDM 还是非常好用的!支持一把
    encro
        8
    encro  
       2024-04-15 14:24:21 +08:00
    pdm 用了很久了,大概 2 年?
    还有很多不足,但是体验确实做得不错。。。

    uv 现在最大问题是还不支持镜像!!!!
    selfeasy
        9
    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
        10
    shijingshijing  
       2024-04-15 14:55:57 +08:00   ❤️ 1
    不错,算是 Python 包管理中的佼佼者。

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

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

    但是感觉性能还可以再提升下,安装依赖非常慢,下载进度好像也不太对,感觉比 pip 慢很多。
    pip 有一个下载进度,看着就有预期,但是 pdm 一直转圈就不知道是卡死了还是怎么回事,尤其是安装比较大的包的时候尤其难受
    ewfian
        20
    ewfian  
       347 天前
    还有一个缓存的问题,感觉 pip 有一个全局缓存,安装已经装过的包就很快,但是 pdm 好像大部分都是重新下载
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:16 · PVG 18:16 · LAX 03:16 · JFK 06:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.