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
pl01665077
V2EX  ›  Python

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

  •  
  •   pl01665077 · 3 天前 · 4878 次点击

    也是醉了,最近使用 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

    82 条回复    2024-09-27 17:54:45 +08:00
    runinhard
        1
    runinhard  
       3 天前   ❤️ 4
    是的 ,全他么是垃圾
    dcoder
        2
    dcoder  
       3 天前
    go.mod / Rust cargo:
    我不是针对你 poetry, 我是说在座的各位 python 包管理, 都是垃圾 ...
    dcoder
        3
    dcoder  
       3 天前
    认真讨论, Python 的包管理真的太拉胯了...

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

    还方便折腾 AI 的东西
    Mithril
        4
    Mithril  
       3 天前
    @dcoder 还得加上 .NET NuGet/Java Maven

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

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

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

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

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

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

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

    poetry 没 vendor ,所以你还需要升级 poetry 的依赖。
    donglintong
        43
    donglintong  
       3 天前
    uv +1
    jqtmviyu
        44
    jqtmviyu  
       2 天前
    uv +1

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

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

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

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

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

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

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

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


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

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

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

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

    pip freeze > requirements.txt
    dcoder
        76
    dcoder  
       2 天前
    看了下 rye ,优势是把多个工具整合在一起了. 比如整合 ruff, uv
    目前看来, 貌似直接用 uv 就行了.
    leoking6
        77
    leoking6  
       2 天前 via iPhone
    @dcoder 优势就是万金油吧。环境管理、版本管理、包管理、打包,全都集合在一起了。
    SimonOne
        78
    SimonOne  
       2 天前
    @lxdlam #26 rye 和 uv 啥关系啊,有点搞不懂,uv 开发团队接管了 rye
    lxdlam
        79
    lxdlam  
       2 天前   ❤️ 3
    @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
        80
    beginor  
       2 天前 via Android
    pip+venv 路过,3.12 之后还不能直接 pip 了,必须先建 venv 才行,venv 从此变成 python 版 node_modules
    samzong
        81
    samzong  
       2 天前
    @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
        82
    lonelyparasol  
       8 小时 18 分钟前
    @itskingname 3.12 版本不少库还没适配吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1159 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:12 · PVG 02:12 · LAX 11:12 · JFK 14:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.