推荐学习书目
› 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
pl01665077
V2EX  ›  Python

也是醉了,从 pip 学习到 pipenv,再切换到 poetry,最后还是用回 pip

  •  
  •   pl01665077 · Sep 24, 2024 · 15314 views
    This topic created in 779 days ago, the information mentioned may be changed or developed.

    也是醉了,最近使用 docker+poetry 1.5.1 部署一个项目,dockerfile 模板之前一直正常,最近推送代码到部署环境,发现 docker build 居然失败。一查发现怎么缺少了依赖库?平时使用 poetry 安装不都是自动装依赖库的吗?

    去 github issue 一查,发现这个问题才明白,poetry 的依赖崩了。。。导致重新创建新的环境的时候,再使用 poetry 创建环境就出现安装依赖错误。。。

    解决方案是要锁定 pkginfo 版本

    poetry self add pkginfo==1.10.0
    

    但是改了好几次 dockerfile 还是不行,最后还是导出 requirements.txt ,用 pip 方式安装,改写 dockerfile 后终于部署正常了。。。

    以前受过 pipenv 的教训,它过了一段时间再安装,会出可能启动不了项目,是由于 pipenv 没有完全锁死依赖库版本。现在本来以为 poetry 包管理器足够稳定,可以一直安心用不加班,没想到现在又要重新更好一点的包管理器,或者用回 pip

    91 replies  •  2025-06-05 08:27:25 +08:00
    runinhard
    runinhard
    Sep 24, 2024❤️4
    1
    是的 ,全他么是垃圾
    dcoder
    dcoder
    Sep 24, 2024
    2
    go.mod / Rust cargo:
    我不是针对你 poetry, 我是说在座的各位 python 包管理, 都是垃圾 ...
    dcoder
    dcoder
    Sep 24, 2024
    3
    认真讨论, Python 的包管理真的太拉胯了...

    说实话, 最近在考虑, 干脆用 conda + lock 得了
    https://github.com/conda/conda-lock

    还方便折腾 AI 的东西
    Mithril
    Mithril
    Sep 24, 2024
    4
    @dcoder 还得加上 .NET NuGet/Java Maven

    NPM:在比烂这方面在座各位没有一个能打的。
    dcoder
    dcoder
    Sep 24, 2024
    5
    @Mithril npm 和 Python 的包管理感觉烂得各有千秋
    最近不太用 JS/Node, npm 那个堪比黑洞质量的文件重复问题,貌似优化了不少了?
    jiayouzl
    jiayouzl
    Sep 24, 2024❤️6
    6
    pip 适合 99.99%开发者!别搞什么花里胡哨的!我以前就用 virtualenv 后来 Python 自带虚拟环境了我连 virtualenv 都不装了.
    itskingname
    itskingname
    Sep 24, 2024
    7
    Python 3.12 开始,pip 安装就会给你报错缺少 Imp 包。
    cherryas
    cherryas
    Sep 24, 2024
    8
    原生 env 一把梭
    TimePPT
    TimePPT
    Sep 24, 2024
    9
    开发环境 poetry ,部署乖乖用 pip...
    SilentOrFight
    SilentOrFight
    Sep 24, 2024
    10
    python 包管理是真的乱
    SenLief
    SenLief
    Sep 24, 2024
    11
    我都是用自带的 venv ,可能项目比较小。
    Sezxy
    Sezxy
    Sep 24, 2024❤️2
    12
    懒得折腾,都是 conda+pip
    Mogeko
    Mogeko
    Sep 24, 2024 via iPhone
    13
    @dcoder pnpm 基本解决 node_modules 的问题了 python 暂时无解
    Numbcoder
    Numbcoder
    Sep 24, 2024❤️5
    14
    每次看到有人尬吹 “人生苦短,我用 Python” 我就想笑
    sweat89
    sweat89
    Sep 24, 2024
    15
    我用 conda ,感觉很方便啊
    dishonest
    dishonest
    Sep 24, 2024
    16
    确实是垃圾。不要说包管理不重要,太影响体验了。

    我甚至因为 cargo 的便利,硬学了 rust 。
    encro
    encro
    Sep 24, 2024
    17
    uv 真快。。。
    encro
    encro
    Sep 24, 2024
    18
    pdm 也不错
    FleetingSound
    FleetingSound
    Sep 24, 2024
    19
    poetry 挺好用的,uv 也不错.
    qsnow6
    qsnow6
    Sep 24, 2024
    20
    依赖越少越好
    yolee599
    yolee599
    Sep 24, 2024❤️3
    21
    python -m venv you_path
    不就行了?
    darksword21
    darksword21
    Sep 24, 2024
    22
    能过部署能 pip 最好直接 pip

    conda 也是废物,经常无法 activate ,我在 sagemaker 上部署如果是 conda 的还导致没有日志

    哎 python ,心累
    houzhiqiang
    houzhiqiang
    Sep 24, 2024
    23
    目前在用 pdm ,没有遇到什么问题。pdm 运行慢我是无所谓
    alexsz
    alexsz
    Sep 24, 2024
    24
    用 docker 部署时我都不用 venv
    phithon
    phithon
    Sep 24, 2024
    25
    PEP 668 以后,不用 virtualenv 以后默认不让 pip 装依赖了
    lxdlam
    lxdlam
    Sep 24, 2024
    26
    最近两年都在用 rye ,切到 uv 之后体验丝滑
    lxdlam
    lxdlam
    Sep 24, 2024
    27
    @lxdlam 记忆有偏差,最近一年应该
    R4rvZ6agNVWr56V0
    R4rvZ6agNVWr56V0
    Sep 24, 2024❤️1
    28
    @Numbcoder 说这话的时候,还没有 go 、rust 什么事儿呢。抛开历史看问题你是会的。
    coolair
    coolair
    Sep 24, 2024
    29
    用 uv ,一步到位。
    pckillers
    pckillers
    Sep 24, 2024❤️1
    30
    都用 docker 了,自然直接 pip 全局安装啦。做好 image 版本备份,连 venv 都用不到。
    R4rvZ6agNVWr56V0
    R4rvZ6agNVWr56V0
    Sep 24, 2024
    31
    从 09 年开始就用 pip ,用了十多年了,没啥问题啊。 哈哈哈哈。操作姿势很重要。当然 Windows 平台除外。
    siteshen
    siteshen
    Sep 24, 2024
    32
    以前用 pipenv 的,不过 pipenv 的依赖自动更新很讨厌。现在用 pipenv (不要 pip) + pip 。

    生产环境用 pip install -r requirments.txt
    开发环境用 pipenv shell; # update pypi mirror; pip install -r requirments.txt
    ynkkdev
    ynkkdev
    Sep 24, 2024
    33
    venv + requirments.txt 。。。
    noqwerty
    noqwerty
    Sep 24, 2024 via iPhone
    34
    micromamba/uv 目前为止没遇到解决不了的
    NoOneNoBody
    NoOneNoBody
    Sep 24, 2024❤️2
    35
    一个包 A 存在依赖 B ,用这个 A 去管理其他的,这本来就是个危险的事,除非能保证 AB 同步
    包 A 没有依赖,或者说仅依赖原生,才是相对安全的选择

    框架也是类似逻辑,生活中很多事也是这个逻辑,依赖的东西应该仅限于方便行动,而不是方便掌控
    txx
    txx
    Sep 24, 2024
    36
    @dcoder AI 的东西直接上 nvidia 的 pytorch 的 docker ,cuda 什么的都配好了,开箱即用。
    ClericPy
    ClericPy
    Sep 24, 2024
    37
    除了现在的 uv ,其他的全用了一遍,有的在生产环境遇到 bug (虽然提了以后作者修了),最后还是 venv 就够了。。。
    至于发包,打包成 zipapp 也不耽误,执行环境还是 venv 省事
    Vegetable
    Vegetable
    Sep 24, 2024
    38
    哪有在容器里边再构建虚拟环境得道理? poetry export 为 requirements.txt ,然后容器里直接 pip 才对。

    poetry 最大的问题是慢,不过我也早就跑路到 rye 了
    so1n
    so1n
    Sep 24, 2024
    39
    poetry,pdm 都是本地用啊,线上还是导出 requirements 把
    JZ8ZW193q6W9Awgy
    JZ8ZW193q6W9Awgy
    Sep 24, 2024
    40
    @jiayouzl #6 我新手,觉得 pip+自带的 venv 也蛮好用的。。。
    Elaina
    Elaina
    Sep 25, 2024
    41
    @coolair uv 相比 poetry 有什么优点吗,其他的貌似我都用过,就是没用过 uv😂
    Trim21
    Trim21
    Sep 25, 2024❤️1
    42
    因为 pip 没法有外部依赖,所以直接把他用到的依赖给 vendor 了,所以等你好久不升级 pip ,pip 告诉你版本太旧装不了新依赖的时候你只需要升级 pip 就行。

    poetry 没 vendor ,所以你还需要升级 poetry 的依赖。
    donglintong
    donglintong
    Sep 25, 2024
    43
    uv +1
    jqtmviyu
    jqtmviyu
    Sep 25, 2024
    44
    uv +1

    ```sh
    # 安装
    uv pip install -r requirements.txt
    # 导出
    uv pip freeze > requirements.txt
    ```
    mayli
    mayli
    Sep 25, 2024❤️1
    45
    rye 好,快去用。
    自从用了 rye ,我整个人的毒性都降低了,就感觉快
    lgh
    lgh
    Sep 25, 2024 via iPhone
    46
    在用 pdm ,暂时没有想换的理由。

    楼上好多人把环境隔离和依赖管理混为一谈的。

    用 pip 最大的问题还是直接依赖和间接依赖的区别。如果不用 pdm 的时候我会用 requirements.txt 管理直接依赖、再 freeze 成 requirements-lock.txt ,否则要升级某个库的时候简直想死。
    hanxiV2EX
    hanxiV2EX
    Sep 25, 2024 via Android
    47
    pdm 真爽,用了回不去了。
    shxxy
    shxxy
    Sep 25, 2024 via iPad
    48
    uv+1
    coolair
    coolair
    Sep 25, 2024
    49
    @Elaina #40 uv 是终点站。
    keenkiller
    keenkiller
    Sep 25, 2024
    50
    conda+pip

    跑 docker 的话直接装全局就行
    kaktos
    kaktos
    Sep 25, 2024
    51
    无脑上 uv ,其他看都不要看
    bianjp
    bianjp
    Sep 25, 2024
    52
    poetry 不支持全局配置使用国内的 PyPI 镜像站挺不方便的,官方一直不愿意做这个功能。
    wryyyyyyyyyyyy
    wryyyyyyyyyyyy
    Sep 25, 2024
    53
    @encro pdm 综合使用体验感觉还不如 poetry ,吹的 pep 提出的那个特性被否了,没通过。
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    54
    @dcoder 做 web 项目不太习惯用 conda ,嘿嘿
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    55
    @jiayouzl 那也是,不过有时安装新的包总是忘记 pip freeze 等等。。。
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    56
    @dishonest rust 我也会,不过 cargo 的源要配置国内源会方便点,一开始配置还挺麻烦的。。。
    uni
    uni
    Sep 25, 2024
    57
    uvuvuv
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    58
    @GeekGao 谢谢分享经历,哈哈,pip 还是稳
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    59
    @siteshen 对,pipenv 自动更新依赖很讨厌。
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    60
    @NoOneNoBody 对的,非常赞同!
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    61
    @Vegetable poetry 也可以不用虚拟环境安装的,直接在容器里面全局安装。dockerfile 使用 poetry 主要是保持开发和生产环境一致性,而且开发时只需要 poetry install ,部署时省去很多导出 requirements.txt 步骤
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    62
    @lgh 是手写 requirements.tx 管理依赖,freeze 生成 requirements-lock.txt 依赖吗?学习了
    edisonwong
    edisonwong
    Sep 25, 2024
    63
    最舒心的是 go mod ,不过也有遇到管理 etcd 包一坨 shit 的时候(那是因为作者反 go mod 一直不修); npm 是一坨,yarn ,pnpm ( workspace )反正前端每次构建都是个玄学; python 也好不到哪里去哈哈哈
    tf2
    tf2
    Sep 25, 2024❤️1
    64
    觉得 pip 垃圾的,因为很多东西是 .so 的东西导致的。

    其他语言包管理不是强,而是原生性能能支持 99%的功能纯语言实现了 但凡你 cgo JNI 搞进去,依赖管理也会变得复杂。

    纯.py 的包管理复杂吗?一点都不复杂。直接全部复制到项目 lib 目录就 vendoring 了。什么版本管理冲突安装失败,不存在的。举个例子,以前 requests 就是这样复制了一套 urllib3 打包一起的。
    Trim21
    Trim21
    Sep 25, 2024
    65
    poetry 有 export ,你 poetry export -f requirements.txt --output requirements.txt 然后用 pip 装不就是了,还能减少 镜像层数。。。
    chopin1998519
    chopin1998519
    Sep 25, 2024
    66
    我用了十年 python , 一直都是 sudo pip 的。。。。

    知道最近项目实在太杂,互相依赖玩儿崩了, 老老实实用了曾经嗤之以鼻的 venv+pip ,

    但是每个环境都重新来一次 nv 的那一大坨库实在不舒服。。。。


    比较了一下 pdm/ uv , 目前选了 uv , 简单用了一下还是挺舒服的。。。

    不过也遇到一个环境, 没法用, 单独给它开个 venv 。。。
    wupher
    wupher
    Sep 25, 2024
    67
    uv + 1

    Rust 完善工具链方面,真是没说的。
    pl01665077
    pl01665077
    OP
    Sep 25, 2024
    68
    @chopin1998519 对,每换个环境都重新来一次 pip+venv 太繁琐了,所以喜欢用 poetry install 一下就创建好了。
    全局 pip 还是不太好,每个项目版本依赖不一样。
    sickoo
    sickoo
    Sep 25, 2024
    69
    uv ? 我去看看 真的那么好用吗?
    jiayouzl
    jiayouzl
    Sep 25, 2024
    70
    @pl01665077 养成个习惯,在 git push 的时候就维护下 requirements.txt 就行了.
    stobacco
    stobacco
    Sep 25, 2024
    71
    我也是和楼主一样的历程,被 python 包管理弄得心态炸过几次,导致我现在都害怕包管理这个玩意儿 比如 node 、go 的,我没学它们之前以为和 python 包管理一样乱。。。
    dcoder
    dcoder
    Sep 25, 2024
    72
    从这帖子里听说了 rye, uv
    看了下, 都是 Rust 写的, 2023 才出来的新项目, git star: rye (13.6k), uv (20.9k)
    好嘛, python 包管理真热闹, 没完没了了,是不是 XD

    用来代替 conda 的话,哪个更好?
    user1284
    user1284
    Sep 25, 2024
    73
    有的项目用 poetry 安装一装一个报错, 还是用 uv 吧, rye 也是用的 uv
    dcoder
    dcoder
    Sep 25, 2024
    74
    @yb2313 查了下, rye 确实用的 uv. 那用 rye 优势是啥
    foyoux
    foyoux
    Sep 25, 2024
    75
    pip + venv

    pip freeze > requirements.txt
    dcoder
    dcoder
    Sep 25, 2024
    76
    看了下 rye ,优势是把多个工具整合在一起了. 比如整合 ruff, uv
    目前看来, 貌似直接用 uv 就行了.
    leoking6
    leoking6
    Sep 25, 2024 via iPhone
    77
    @dcoder 优势就是万金油吧。环境管理、版本管理、包管理、打包,全都集合在一起了。
    SimonOne
    SimonOne
    Sep 25, 2024
    78
    @lxdlam #26 rye 和 uv 啥关系啊,有点搞不懂,uv 开发团队接管了 rye
    lxdlam
    lxdlam
    Sep 25, 2024❤️4
    79
    @SimonOne uv 是替代 pip 的,rye 是 flask 作者 mitsuhiko 创始的,他觉得 Python 的研发生态链比起 rust 实在是太烂了,自己搞了一个工具关注整个研发生命周期,使用 独立 python 解释器 + venv + pip + pyproject.toml 等既有生态来管理。后面 astral 团队开发完 uv 之后跟 mitsuhiko 沟通,接管了 rye 项目( https://astral.sh/blog/uv )。

    从关系上来说,rye 是一个研发管理工具,基于 project 粒度隔离 python 解释器、venv ,自然也就隔离了包管理生态,uv 跟 pip 在 rye 里可以互换,ruff 也不是强制要求接入。

    从我个人体感来说,rye + uv + ruff 就是目前最舒服的方案,我有用来实验的 jupyter 项目,也有打包成 oci 的纯 python 项目,rye 都能非常完美去接入和使用(除了某些模型代码里面写死了 pip 之外)。

    P.S.,关于 Python 开发者体验和 rye 本身,mitsuhiko 在 rye 创始之初就有个 discussion ,值得一读: https://github.com/astral-sh/rye/discussions/6
    beginor
    beginor
    Sep 25, 2024 via Android
    80
    pip+venv 路过,3.12 之后还不能直接 pip 了,必须先建 venv 才行,venv 从此变成 python 版 node_modules
    samzong
    samzong
    Sep 25, 2024
    81
    @SimonOne #78 补充下我的理解,rye 目前比 uv 多了一个系统 python 版本管理的能力,类似 pyenv ; uv 会 find 你系统安装的多个版本的 python ,比如 brew install, pyenv install, rye install ,然后根据你的需求指向对应的版本。

    使用之后发现,brew install python [email protected] [email protected] + uv 就很方便了。目前我也不在使用 pyenv 和 rye 了。

    而且最近 uv 增加了很多 rye 的功能,那么最终 uv 貌似会往代替 rye 的方向发展 ??? maybe , 一点见解。
    lonelyparasol
    lonelyparasol
    Sep 27, 2024
    82
    @itskingname 3.12 版本不少库还没适配吧
    twig
    twig
    Oct 10, 2024 via iPhone
    83
    @Numbcoder 越用 Python 越短
    purplemystic
    purplemystic
    Oct 28, 2024
    84
    @chopin1998519 现在用 uv, 配置 cuda 环境很不美丽, 太大了, cuda 环境还是用的 docker
    purplemystic
    purplemystic
    Oct 28, 2024
    85
    @dcoder #74 rye 会逐步被 uv 替代, 这也是官方的路线
    purplemystic
    purplemystic
    Oct 28, 2024
    86
    @stobacco 第一次被恶心到, 还是 pipenv, 那个每次不知道等待多久的 locking
    chopin1998519
    chopin1998519
    Oct 29, 2024
    87
    @purplemystic #84 不会啊。。。。我就是因为 cuda/torch 这个转过来的。。。docker 。。。。我更不喜欢
    purplemystic
    purplemystic
    Nov 5, 2024
    88
    @chopin1998519 #87 主要是 cuda, torch 之类的库太大了, 如果每次创建一个虚拟环境, 就下载编译一遍, 就好心累
    chopin1998519
    chopin1998519
    Nov 6, 2024❤️1
    89
    @purplemystic #88 uv 会用硬链接、符号链接、cow 等等 共享相同的版本呀, 所以实际就一份,upgrade 了另说
    hellomacos
    hellomacos
    Nov 21, 2024
    90
    poetry 要是遇到需要同一个依赖,但是需要的版本的不同,那是真的坑。人都傻了
    sonforest
    sonforest
    Jun 5, 2025
    91
    @Mithril 看不起我 composer 吗?绝对有办法让你抓狂
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2516 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 231ms · UTC 04:37 · PVG 12:37 · LAX 20:37 · JFK 23:37
    ♥ Do have faith in what you're doing.