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 · 218 天前 · 5324 次点击
    这是一个创建于 218 天前的主题,其中的信息可能已经有所发展或是发生改变。

    好久不上 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  
       218 天前
    支持,虽然我在上一个 Python 包管理帖子里推荐了 uv ,
    但我依然觉得 pdm 的设计也很不错(我几个包管理都试过,也都用在不同的项目里)
    只是我比较偏爱 rust 带来的高速和类 cargo 体验(纯个人偏好,不代表 uv 和 pdm 本身的优劣对比)

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

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

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

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

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


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

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

    就同楼主说的一样,专业人员肯定是要考虑实际需求做选择的。
    noahlias
        6
    noahlias  
       218 天前
    让我想起了年初看的一篇文章
    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  
       218 天前
    PDM 还是非常好用的!支持一把
    encro
        8
    encro  
       218 天前
    pdm 用了很久了,大概 2 年?
    还有很多不足,但是体验确实做得不错。。。

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

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

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

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

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