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 · 11 天前 · 5279 次点击

    也是醉了,最近使用 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  
       11 天前   ❤️ 4
    是的 ,全他么是垃圾
    dcoder
        2
    dcoder  
       11 天前
    go.mod / Rust cargo:
    我不是针对你 poetry, 我是说在座的各位 python 包管理, 都是垃圾 ...
    dcoder
        3
    dcoder  
       11 天前
    认真讨论, Python 的包管理真的太拉胯了...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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