为什么 Python 的包管理这么难用,比 node 的 npm 难用一万倍,每次进入项目都要手动执行一下 conda activate xxx,难道就没有默认的 Python 项目级别的依赖吗? - V2EX
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
arnoldnuo
V2EX    Python

为什么 Python 的包管理这么难用,比 node 的 npm 难用一万倍,每次进入项目都要手动执行一下 conda activate xxx,难道就没有默认的 Python 项目级别的依赖吗?

  •  
  •   arnoldnuo
    123 1 天前 6546 次点击

    chatgpt 也没给一个实用的方案,你们都是怎么管理自己的 python 环境的?

    74 条回复    2025-11-26 22:15:32 +08:00
    stimw
        1
    stimw  
       1 天前   14
    快 2026 了,uv 应该是版本答案了吧
    https://docs.astral.sh/uv/
    MareDevi
        2
    MareDevi  
       1 天前
    pdm 启用 uv 后端,同时搭配 mise 使用体验更佳
    TArysiyehua
        3
    TArysiyehua  
       1 天前
    .venv
    uperrichman
        4
    superrichman  
       1 天前
    pycharm 自动管理虚拟环境。
    你要不喜欢 ide 就用 pyenv ,设置好之后 cd 进目录自动进项目的虚拟环境。
    jpyl0423
        5
    jpyl0423  
       1 天前
    没用过 conda ,vscode 不是打开项目自己激活环境吗
    actors111
        6
    actors111  
       1 天前
    一直用 venv , conda 太笨重了.
    deplives
        7
    deplives  
       1 天前
    2025 年了,还在用 conda 吗
    heyzenxu
        8
    heyzenxu  
       1 天前
    远一点的 poetry 2018 年就有了, 近一点的 uv 和 pixi, 怎么就难用了
    kxg3030
        9
    kxg3030  
       1 天前   1
    python -m venv .venv
    linux:source .venv/bin/active
    windows:source .venv/Scripts/active
    这很难吗
    ratazzi
        10
    ratazzi  
       1 天前
    mise + uv 好用的很
    whenov
        11
    whenov  
       1 天前
    shell 设个短点的 alias 不就行了
    crocoBaby
        13
    crocoBaby  
       1 天前
    昨晚刚刷到的 python 包管理教程,就用 uv 可以了,相当于 npm 的 yarn
    privil
        14
    privil  
       1 天前
    每次进入项目都要手动执行一下 conda activate xxx 你就不能装个自动激活环境的程序吗? direnv 了解下
    glacer
        15
    glacer  
       1 天前
    习惯用 venv 了,conda 一直玩不来,太重了
    fkdtz
        16
    fkdtz  
       1 天前
    恰恰相反,我就喜欢这种一切尽在掌控的感觉
    想切什么环境、当前在什么环境,完全自己说了算
    嫌麻烦配命令就好了
    Greendays
        17
    Greendays  
       1 天前
    就用的 venv ,一个项目一个,比较吃硬盘但是很稳定。
    hertzry
        18
    hertzry  
       1 天前
    function ca(){
    conda activate $1
    }
    donaldturinglee
        19
    donaldturinglee  
       1 天前
    每个项目是独立的环境应该才是正确的做法吧。统一的环境除非你只做单个项目,不然你只要一个项目的依赖出了问题,其余的一定会爆炸
    YanSeven
        20
    YanSeven  
       1 天前
    uv 随着大模型的兴起应该算是主流方案了?
    treblex
        21
    treblex  
       1 天前 via iPhone
    UV 有本地梯子还行,上服务器更麻烦了,哎
    Aprdec
        22
    Aprdec  
       1 天前
    ..venv 不也得激活环境吗 楼上和 conda 有啥区别 楼主不就是嫌麻烦吗
    longredzzz
        23
    longredzzz  
       1 天前
    给项目配一下 direnv 实现 shell 自动激活环境。
    python 环境管理我用 pixi,能管理 conda 包 和 pypi 包
    craftsmanship
        24
    craftsmanship  
       1 天前 via Android
    UV 你值得拥有
    skuuhui
        25
    skuuhui  
       1 天前
    自从用 AI 编程,从来没有在命令行输入过 python 相关命令了
    reoah2
        26
    reoah2  
       1 天前
    windows 下 vscode 打开 terminal 会自动执行:./venv/Scripts/Activate.ps1 ,一进 terminal 就是虚拟环境了,这很好用啊
    wuruxu
        27
    wuruxu  
       1 天前
    apt-get 想要什么包都有
    coreJK
        28
    coreJK  
       1 天前   2
    从开始学 python 使用自带的 venv 到现在
    pyenv ,pix ,pdm ,uv 都用过了,分享一点点心得吧

    半自动
    1. pyenv: 管理多版本的 python 环境好手,windows 和 ubuntu 中都可以实现方便的多版本切换,但是要注意和其他修改环境变量的程序(比如 ros 机器人开发框架),但是也得科学上网的情况下用,不然容易卡在下载 python 安装包的时候

    2. pipx: 这个可以理解是,用来管理用 python 开发和发布的一些工具管理,比如 labelme ,youtube dowload 这类工具,可以独立成一个系统工具(其实还是建立了一个虚拟环境,然后再在这个独立的环境安装了工具,避免污染系统的 pip 环境依赖)

    往“全自动”方向发展
    3.pdm: 在他之前还有一个 poetry ,能够管 python 一整个开发周期(版本管理、环境管理、依赖管理、打包 whl 分发),pdm 有一点比 uv 方便,他管理的依赖可以跨平台,在写 pyqt 的时候,loguru 模块在 win 和 linux 环境下会到一个 win32ctime 模块,pdm 默默的做了模块区分系统环境的事情,帮我节省了很多(我尝试用 uv 重新管理这个项目,结果出现了模块依赖的问题,uv 好像也有区分的办法,需要自己编写目前,我用得还不熟 XD )

    4.uv: 非常快,做的事情和 pdm 、poetry 差不多,也是为了能够管理整个开发周期,还可以做 pipx 做的事情,管理一些开发工具

    pdm 、和 uv 一定要注意他们的缓存,空间不够很可能爆目录目录...,
    本人也还在摸索和在实际工作中使用,才学疏浅,大佬们指正
    coreJK
        29
    coreJK  
       1 天前
    补充一点,pdm 和 uv 都可以针对特殊的 pytorch 类的包(包括但不限于),专门分配对应的 index
    版主应该最容易遇到的是这个问题,和 pytorch 有关的,现在可以参考这两个工具的方案

    1. uv 的方案:https://uv.oaix.tech/guides/integration/pytorch/?h=pytorch
    2. pdm 的方案: https://pdm-project.org/zh-cn/latest/usage/config/#_5
    kneo
        30
    kneo  
       1 天前
    python 和 node ,人称依赖管理界的卧龙凤雏。现在 node 说我的 npm 比你好用一万倍,说完自己都笑了。
    liu938651469
        31
    liu938651469  
       1 天前 via Android
    pyenv 任意 py 版本 再和 uv 配合好了
    est
        32
    est  
       1 天前   1
    与其说是 py 的包管理烂,不如说 py 是 C 库的附庸。

    py 的所有包管理机制烂的根源就是 .so .dll 不好管理导致的。还有一些逆天玩意是源码分发,你就可劲儿折腾吧。

    你觉得 npm 好用,那是因为手没伸到这么长而已。纯 .js 包有啥好管理的。
    litchinn
        33
    litchin  
       1 天前   1
    npm 感觉半斤八两,工具越多的一般越难用,典型的如 pip 和 npm ,人们分别继续开发了 venv ,conda ,yarn ,pnpm...
    现在 python 的版本答案是 uv
    感觉包管理最好的就是 cargo 了
    viking602
        34
    viking602  
       1 天前
    建议使用 uv
    jsq2627
        35
    jsq2627  
       1 天前
    @kneo pnpm 已经把 npm 的不足都修正了。现在 pnpm/npm 的问题是,js 生态碎片化,很多简单的功能都要发 npm 包,导致一个项目有成千上万依赖。
    Suaxi
        36
    Suaxi  
       1 天前
    conda 我是一个项目一个 env ,就首次安装的时候 active 一下,也还行
    1daydayde
        37
    1daydayde  
       1 天前
    #9 可以满足临时的小脚本项目
    ,如果你依赖多,那么可以用 uv 来管理,在初始化项目的时候安装速度不比 npm 快一万倍?
    huijiewei
        38
    huijiewei  
       1 天前
    别提 npm 了,被攻击的生活不能自理了都
    wu67
        39
    wu67  
       1 天前
    venv 呀...以我自己玩的 fastapi 为例

    python3 -m venv venv

    Makefile 里面写好:
    VENV_ACTIVATE = . venv/bin/activate

    dev:
    写个 tab 在这$(VENV_ACTIVATE) && uvicorn main:app --reload --host 0.0.0.0 --port=3000

    然后手动写好 requirements.txt, 执行:
    pip install -r requirements.txt

    启动的时候跑 make dev 就行了, ctrl c 终结命令的时候, 会自动退出虚拟环境
    uni
        40
    uni  
       1 天前
    gpt 竟然没有给你 uv ?这有点出乎我意料
    smlcgx
        41
    smlcgx  
       1 天前 via iPhone
    感觉 venv 够用了,一行代码进退环境,遇到新问题再想新办法
    tisswb
        42
    tisswb  
       1 天前
    windows 开发:官方安装包+venv ,生产环境:pyenv+virtualenv
    jukanntenn
        43
    jukanntenn  
       1 天前
    你说比不上 cargo 我是接受的,说比不上 npm 是不是侮辱性太大了?
    guanzhangzhang
        44
    guanzhangzhang  
       1 天前
    试试 devcontainer
    RyougiShiki
        45
    RyougiShiki  
       1 天前
    python venv 是否 active 相当于 npm 是否-g 参数,npm 默认生成配置文件和使用虚拟环境是个好习惯,python 毕竟设计的比较早算历史问题吧
    JShen
        46
    JShen  
       1 天前
    @stimw 赞了,主 Java 选手,终于找到了好用的方式,刚才用 gpt 实践了 5 分钟,真的是非常 fast 好用。 类似 npm 这种软件。啥时候有可以管理 jdk 版本的软件,现在就是 8 ,到老也是 8.
    y1y1
        47
    y1y1  
       1 天前
    npm ?你拿什么做比较不好
    conn4575
        48
    conn4575  
       1 天前 via Android
    pip ,pyenv ,conda ,poetry ,uv ,python 里面一个虚拟环境和包管理也是折腾吐了
    hxhc
        49
    hxhc  
       1 天前
    conda activate 一下有什么不好吗,明确自己在哪个环境,省的搞混了搞炸了
    hicdn
        50
    hicdn  
       1 天前
    推荐 mise https://github.com/jdx/mise ,太香了。
    ruanimal
        51
    ruanimal  
       1 天前
    @JShen vfox
    dust2
        52
    dust2  
       1 天前
    uv 工具啊
    yh7gdiaYW
        53
    yh7gdiaYW  
       1 天前
    你用的啥 ide 还需要考虑这个问题? vscode 自动会给项目绑定好虚拟环境啊
    rocmax
        54
    rocmax  
       1 天前 via Android
    Sped0n
        55
    Sped0n  
       1 天前
    可以看看 direnv ,进特定 directory 自动激活

    https://github.com/direnv/direnv
    Hudiebbk
        56
    Hudiebbk  
       1 天前
    uv 无敌好用的
    thiiadoewjwe
        57
    thiiadoewjwe  
       1 天前
    C++的第三方库,能把人折磨死
    jonty
        58
    jonty  
       1 天前
    目前还在手搓 cmake 的说话了吗
    amon
        59
    amon  
       1 天前
    有请楼下上一张 node_modules 的那张梗图
    svenorgcn
        60
    svenorgcn  
       1 天前
    @JShen sdkman
    matcloud
        61
    matcloud  
       1 天前
    uv
    fgwmlhdkkkw
        62
    fgwmlhdkkkw  
       1 天前 via Android
    shell 都有 profile ,你可以修改。
    wonderfulcxm
        63
    wonderfulcxm  
       1 天前
    可拉倒吧,python 比 node 那套好用一万倍
    KaitoHH
        64
    KaitoHH  
       1 天前   1
    conda 不完全是一个纯粹的 python 包管理器,因为它还可以帮你管理非 python 依赖,比如帮你在非系统层面安装各种 lib 库、cuda 、nvcc 等等,不污染本身的系统环境,这一块还是比别的 python 包管理器好不少的
    aarontian
        65
    aarontian  
       1 天前
    我觉得 conda 挺好用的。。适合本地固定几个环境,但可能会有一堆项目的场景,配合 jupyter 也好用,需要做点数据分析的话很好使。
    几乎所有 IDE 进 terminal 都会自动 conda activate ,需要手动敲的时候很少。
    部署的话直接 docker ,也就维护个 requirements.txt

    uv 也不错,不过我本机开发习惯比较随意一些,一方面项目很多,一方面有时候随便开个目录就开写了,还是喜欢用 conda
    vitality
        66
    vitality  
       1 天前
    uv ,我对 uv 的评价是快到极致。
    JCZ2MkKb5S8ZX9pq
        67
    JCZ2MkKb5S8ZX9pq  
       1 天前
    啥时候 uv 能支持 pnpm 那种全局 store 就好了,不然还是太占空间了。
    我这种碎小项目多的 pandas 啥的重复装可受不了。
    Eureka0
        68
    Eureka0  
       1 天前
    @JCZ2MkKb5S8ZX9pq uv 是支持的,把 [link-mode]( https://docs.astral.sh/uv/reference/settings/#link-mode) 设置成 symlink 就行了,我就是这么用的,能节省不少空间
    runze
        69
    runze  
       1 天前
    @JShen #46 试试 jbang
    yjhatfdu2
        70
    yjhatfdu2  
       1 天前
    conda 太傻逼了,用了小心给你发律师函
    xuyang2
        71
    xuyang2  
       23 小时 9 分钟前
    > 为什么 Python 的包管理这么难用

    因为 Python 生于 1994 年
    leeg810312
        72
    leeg810312  
       21 小时 25 分钟前
    python 包管理又这么多工具,侧面证明包管理生态太烂了,这么多年发展都没有彻底改变这个状况
    godall
        73
    godall  
       13 小时 53 分钟前 via Android
    @MareDevi 请问在集成开发工具下比如 cursor 里可以用吗?
    JCZ2MkKb5S8ZX9pq
        74
    JCZ2MkKb5S8ZX9pq  
       11 小时 5 分钟前
    @Eureka0
    第一次知道这个设置,感谢。
    我是 Mac ,看上去默认的 clone 就可以了。
    之前不知道 clone 这个模式,看到不是符号链接以为它给复制了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5212 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 01:20 PVG 09:20 LAX 17:20 JFK 20:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86