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

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

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

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

    你觉得 npm 好用,那是因为手没伸到这么长而已。纯 .js 包有啥好管理的。
    litchinn
        33
    litchinn  
       2025 年 11 月 25 日   ❤️ 1
    npm 感觉半斤八两,工具越多的一般越难用,典型的如 pip 和 npm ,人们分别继续开发了 venv ,conda ,yarn ,pnpm...
    现在 python 的版本答案是 uv
    感觉包管理最好的就是 cargo 了
    viking602
        34
    viking602  
       2025 年 11 月 25 日
    建议使用 uv
    jsq2627
        35
    jsq2627  
       2025 年 11 月 25 日
    @kneo pnpm 已经把 npm 的不足都修正了。现在 pnpm/npm 的问题是,js 生态碎片化,很多简单的功能都要发 npm 包,导致一个项目有成千上万依赖。
    Suaxi
        36
    Suaxi  
       2025 年 11 月 25 日
    conda 我是一个项目一个 env ,就首次安装的时候 active 一下,也还行
    1daydayde
        37
    1daydayde  
       2025 年 11 月 25 日
    #9 可以满足临时的小脚本项目
    ,如果你依赖多,那么可以用 uv 来管理,在初始化项目的时候安装速度不比 npm 快一万倍?
    huijiewei
        38
    huijiewei  
       2025 年 11 月 25 日
    别提 npm 了,被攻击的生活不能自理了都
    wu67
        39
    wu67  
       2025 年 11 月 25 日
    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  
       2025 年 11 月 25 日
    gpt 竟然没有给你 uv ?这有点出乎我意料
    smlcgx
        41
    smlcgx  
       2025 年 11 月 25 日 via iPhone
    感觉 venv 够用了,一行代码进退环境,遇到新问题再想新办法
    tisswb
        42
    tisswb  
       2025 年 11 月 25 日
    windows 开发:官方安装包+venv ,生产环境:pyenv+virtualenv
    jukanntenn
        43
    jukanntenn  
       2025 年 11 月 25 日
    你说比不上 cargo 我是接受的,说比不上 npm 是不是侮辱性太大了?
    guanzhangzhang
        44
    guanzhangzhang  
       2025 年 11 月 25 日
    试试 devcontainer
    RyougiShiki
        45
    RyougiShiki  
       2025 年 11 月 25 日
    python venv 是否 active 相当于 npm 是否-g 参数,npm 默认生成配置文件和使用虚拟环境是个好习惯,python 毕竟设计的比较早算历史问题吧
    JShen
        46
    JShen  
       2025 年 11 月 25 日
    @stimw 赞了,主 Java 选手,终于找到了好用的方式,刚才用 gpt 实践了 5 分钟,真的是非常 fast 好用。 类似 npm 这种软件。啥时候有可以管理 jdk 版本的软件,现在就是 8 ,到老也是 8.
    y1y1
        47
    y1y1  
       2025 年 11 月 25 日
    npm ?你拿什么做比较不好
    conn4575
        48
    conn4575  
       2025 年 11 月 25 日 via Android
    pip ,pyenv ,conda ,poetry ,uv ,python 里面一个虚拟环境和包管理也是折腾吐了🤢
    hxhc
        49
    hxhc  
       2025 年 11 月 25 日
    conda activate 一下有什么不好吗,明确自己在哪个环境,省的搞混了搞炸了
    hicdn
        50
    hicdn  
       2025 年 11 月 25 日
    推荐 mise https://github.com/jdx/mise ,太香了。
    ruanimal
        51
    ruanimal  
       2025 年 11 月 25 日
    @JShen vfox
    dust2
        52
    dust2  
       2025 年 11 月 25 日
    uv 工具啊
    yh7gdiaYW
        53
    yh7gdiaYW  
       2025 年 11 月 25 日
    你用的啥 ide 还需要考虑这个问题? vscode 自动会给项目绑定好虚拟环境啊
    rocmax
        54
    rocmax  
       2025 年 11 月 25 日 via Android
    Sped0n
        55
    Sped0n  
       2025 年 11 月 25 日
    可以看看 direnv ,进特定 directory 自动激活

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

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

    因为 Python 生于 1994 年
    leeg810312
        72
    leeg810312  
       2025 年 11 月 26 日
    python 包管理又这么多工具,侧面证明包管理生态太烂了,这么多年发展都没有彻底改变这个状况
    godall
        73
    godall  
       2025 年 11 月 26 日 via Android
    @MareDevi 请问在集成开发工具下比如 cursor 里可以用吗?
    JCZ2MkKb5S8ZX9pq
        74
    JCZ2MkKb5S8ZX9pq  
       2025 年 11 月 26 日
    @Eureka0
    第一次知道这个设置,感谢。
    我是 Mac ,看上去默认的 clone 就可以了。
    之前不知道 clone 这个模式,看到不是符号链接以为它给复制了。
    wangtian2020
        75
    wangtian2020  
       2025 年 11 月 27 日
    确实不如 npm 一根毛,有些 body 以为遇到几个要 node-gyp 编译的二进制包就以为是 npm 的全部了,大多数 node 包直接装几秒就装好
    MareDevi
        76
    MareDevi  
       2025 年 12 月 1 日
    @godall #73 二者并不冲突,mise 是通过 shims 自动切换管理你的环境变量来管理环境,现代 ide 一般都能自动检测当前目录下的虚拟环境
    kingfighters
        77
    kingfighters  
       2025 年 12 月 8 日
    你要是觉得切换目录就要切换虚拟环境,可以试一下 direnv
    pyKane
        78
    pyKane  
       15 天前
    楼主是不是把事情弄的复杂了。
    用原生自带的,都很好用呀
    venv + pip + requirements.txt
    一个项目基本上上面三个是标准呀。
    Pychram 默认也自动识别项目下的 .venv 虚拟环境。

    一直这样用,个个项目之间切换,包的版本依赖管理,都在 requirements.txt 里定义。

    完全没碰到啥问题。
    shinecurve
        79
    shinecurve  
       12 天前
    uv
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:30 · PVG 07:30 · LAX 15:30 · JFK 18:30
    ♥ Do have faith in what you're doing.