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

有没有好用的 Python 版本、虚拟环境和包管理的工具

  •  
  •   hu6u · 145 天前 · 4719 次点击
    这是一个创建于 145 天前的主题,其中的信息可能已经有所发展或是发生改变。
    感觉 conda 不太好用,随便创建一个环境都比较大(个人感觉
    67 条回复    2024-03-15 20:52:37 +08:00
    infun
        1
    infun  
       145 天前
    比较大是指什么? 有没有指定 python=3.xx
    不指定的话 可能把 base 装的都带进去
    chiaf
        2
    chiaf  
       145 天前
    visual studio
    zhangzEric
        3
    zhangzEric  
       145 天前 via iPhone
    Poetry ?
    han1988
        4
    han1988  
       145 天前
    miniconda
    suuuch
        5
    suuuch  
       145 天前
    我比较 old , 随便弄弄就 miniconda 。(大部分晴空下懒得弄都是这
    不嫌弃麻烦就用 miniconda 就官网下载编译安装。
    然后包管理的话,virtualenv ,就这个了,使用也方便,多敲几行。其它的没怎么用过。
    BBCCBB
        6
    BBCCBB  
       145 天前
    基本没有比 conda/miniconda 好用稳定的了. 我用 miniconda
    Alias4ck
        8
    Alias4ck  
       145 天前
    yy77
        10
    yy77  
       145 天前   ❤️ 3
    简单的项目推荐用 python -m venv 就可以了。
    dayeye2006199
        11
    dayeye2006199  
       145 天前
    Pip
    xipuxiaoyehua
        12
    xipuxiaoyehua  
       145 天前
    https://nixos.org/ nix 命令行工具,可以对不同的项目指定不同的开发环境,互不干扰,与系统默认也不干扰
    ShadowPower
        13
    ShadowPower  
       145 天前
    pipenv

    缺点是会下载源码编译,需要自己安装编译所需的依赖
    ShadowPower
        14
    ShadowPower  
       145 天前
    pyenv + pipenv
    chhtdd
        15
    chhtdd  
       145 天前
    我用 docker
    chronsea
        16
    chronsea  
       145 天前
    不是专门写 Python 的用 miniconda ,相对熟悉的用 pyenv+poetry, pyenv 管理 python 版本和虚拟环境,poetry 管理包
    neochen13
        17
    neochen13  
       145 天前
    penv
    laqow
        18
    laqow  
       145 天前
    micromamba
    encro
        19
    encro  
       145 天前
    pyenv,
    pdm,
    miniconda
    SenLief
        20
    SenLief  
       145 天前 via iPhone
    简单的小项目我一直我们 Python venv 模块
    noqwerty
        21
    noqwerty  
       145 天前 via iPhone
    试下来最简单的就是 micromamba 了
    anubu
        22
    anubu  
       145 天前
    不嫌重的话,开发环境按项目配置 devcontainer ,配合 vscode 也能实现挺不错的工作区。
    NoOneNoBody
        23
    NoOneNoBody  
       145 天前
    我 miniconda 设了 4 个环境就 24G 了,只要装机器学习、深度学习的东西,空间小不了
    本想找共享 package 的方案,发现需要学习很多知识,反正空间也够,就懒得去研究了
    raycool
        24
    raycool  
       145 天前
    我用 miniconda
    pljhonglu
        25
    pljhonglu  
       145 天前
    rtx 做版本管理,poetry 依赖管理

    https://github.com/jdx/rtx
    forQ
        26
    forQ  
       145 天前
    linux:pyenv
    windows:pyenv-win
    dif
        27
    dif  
       145 天前
    目前用 miniconda 。
    founddev
        28
    founddev  
       145 天前
    miniconda yyds
    chowdpa02k413
        29
    chowdpa02k413  
       145 天前
    only conda
    lululau
        30
    lululau  
       145 天前
    我特想知道为什么 pip 不能像 rubygems 一样在全局安装同一个包的不同版本?虚拟环境可以有,但是不要把包拷来拷去的好不好
    kiddingU
        31
    kiddingU  
       145 天前
    conda
    ericguo
        32
    ericguo  
       145 天前
    @lululau 无法安装的同一个包的不同版本,不过可以每次切项目覆盖。
    Nugine0
        33
    Nugine0  
       145 天前
    写几个基本需求,看看有没有人能给出方案。我以前的调查结论是没一个能打的。

    1. 快速切换不同版本的 Python 解释器,方便升级或降级
    2. 每个项目一个虚拟环境,互不干扰
    3. 同一个包的相同版本共享一份全局空间,不要把每个项目都塞爆
    4. 同一个包的 cpu 和 gpu 版本在不同虚拟环境互不干扰,例如项目 A 装 cpu 版,项目 B 装 gpu 版
    5. 依赖兼容性检验,如果新装一个包会破坏环境,默认拒绝安装,可以选择强制安装
    6. lock 文件独立于操作系统,例如在 windows 上生成的锁文件到 linux 上安装后不变
    7. 支持安装自有索引的包,例如 PyTorch
    8. 默认锁定兼容版本,而不是 xxx = "*"
    coolair
        34
    coolair  
       145 天前 via Android
    实话实说,没有一个好用的!
    vialon17
        35
    vialon17  
       145 天前
    直接手动:
    默认安装一个全局 py ,
    其他 py 安装路径内改 python 执行文件名称就行了,pip 直接在文件夹内执行;
    或者直接 venv 。
    fakepoet
        36
    fakepoet  
       145 天前
    pyenv + pyenv-virtualenv
    917405917
        37
    917405917  
       145 天前 via iPhone
    Poetry
    thevita
        38
    thevita  
       145 天前
    @fakepoet

    同 pyenv + pyenv-virtualenv ,
    支持多种 venv 后端(具体是哪做的我也不是很清楚), venv, virtualenv, conda 都支持
    也能 用 python-build 安装 和管理 standalone 的 python

    就能实现各种环境都在一起管理了

    大部分机遇 几个 python3.x base ,派生一堆 venv

    ai 的场景就 用 anaconda/miniconda 作为 base, conda 作为 venv 后端 管理具体的 ai venv
    IgniteWhite
        39
    IgniteWhite  
       145 天前
    pyenv + pyenv-virtualenv

    然后配置好终端模拟器和代码编辑器/IDE 对于 pyenv 虚拟环境的支持
    hertzry
        40
    hertzry  
       145 天前
    conda create -n your_env_name 就是一个空环境啊,里面什么也没有,怎么会大呢?
    Akkuman
        41
    Akkuman  
       145 天前 via Android
    rye
    LeeReamond
        42
    LeeReamond  
       145 天前
    miniconda 倒是没啥体积的问题,只是 conda 每次启动得单独加载虚拟环境,另外连接第三方软件也不容易,比如 sublimetext 这种,所以感觉还是不好用。我感觉逻辑上应该是有默认层,或者替换启动命令这种逻辑的要好用一些,比如不做切换时固定在某个版本
    kuanat
        43
    kuanat  
       145 天前
    python 版本管理:asdf
    https://asdf-vm.com/

    虚拟环境:python venv

    包管理:pdm
    https://pdm-project.org/
    Yuhyeong
        44
    Yuhyeong  
       145 天前
    conda 还不够用那就没了,OP 的需求是不是想一个 python ,多个不同的包依赖?减少同一个版本的包在多个环境里的多次安装?

    没有这样的环境,conda 的包管理加使用已经很厉害了。说实话我搞机器学习一个 conda 环境最多也就几个 G ,你要是说占用太大,大概率意思是 conda 的存储空间占用太多,这是因为下载下来的包都缓存起来在本地了,你多个环境下载的所有包的 pre-built 文件或者 wheel 都集中存储起来,这样设计的目的是以便下次创建新环境时免去下载的过程。

    miniconda 和 anaconda 的区别就是 base 环境几乎没东西,给自定义环境的用户最大的轻便度。所以建议是用 miniconda ,然后嫌弃占用大的话多了解 conda 安装存储的原理,对缓存包没需求的话勤清理 cache ,这种情况想复用环境可以用 clone 的方法来创建新环境,最大程度减少存储空间占用。
    Yuhyeong
        45
    Yuhyeong  
       145 天前
    用没有广大社区支撑的第三方库管理工具,只会在若干个月后因为某个包的版本依赖问题焦头烂额
    jiayouzl
        46
    jiayouzl  
       145 天前 via iPhone
    brew 安装 python ,虚拟环境就自带或者 virtualenv ,包管理就 pip ,为什么你们要这么复杂?如果对 python 环境有较高要求就 miniconda 就行了啊。
    lxxiil
        47
    lxxiil  
       145 天前 via iPhone
    thonny 整个环境可以复制粘贴带走
    009694
        48
    009694  
       145 天前 via iPhone
    conda 新环境只安装 python 的话只有 100mb 不到的大小,何来很大?
    Alias4ck
        49
    Alias4ck  
       145 天前
    建议看这篇文章 https://alpopkes.com/posts/python/packaging_tools/
    基本对比了市面上的大部分工具 不过我还是推荐 rye (因为我发现 openai 的官方 python sdk 也是用这个来做的
    来源是这里
    https://www.v2ex.com/t/993078#reply1
    bianhui
        50
    bianhui  
       144 天前
    pdm > rye
    knightdf
        51
    knightdf  
       144 天前
    poetry
    clemente
        52
    clemente  
       144 天前
    miniconda > 其他
    okampfer
        53
    okampfer  
       144 天前
    @xipuxiaoyehua #12
    请教一下 nix 的国内镜像源怎么配置?
    xipuxiaoyehua
        54
    xipuxiaoyehua  
       144 天前 via iPhone
    @okampfer 我为了省事起见,走代理🤣,不过我之前看的清华或者中科大的源 wiki 里都写了怎么替换,你可以看一下,不过我的理解如果用清华的源装的 nix 的话 pkgs 默认源应该就已经是清华了
    sworld233
        55
    sworld233  
       144 天前
    miniconda 是好用的
    llsquaer
        56
    llsquaer  
       144 天前
    现在用 virtualenv 但是有一个问题复用库的时候特别麻烦。特别是机器学习的库又大。。

    很大的问题是第三方库的复用不能随心所欲。。导致 10 个项目有 10 个虚拟环境同时又有 10 个相同的库。

    还好现在硬盘便宜了
    listenerri
        57
    listenerri  
       144 天前   ❤️ 1
    啥外部工具都不用,直接用电脑上已安装的具体版本 python 可执行程序 + 官方的 -m venv
    0x19921213
        58
    0x19921213  
       144 天前
    pyenv+virtualenv
    4rat
        59
    4rat  
       143 天前
    pyenv 和 miniconda 哪个好用点?
    一直在用 pyenv
    amlee
        60
    amlee  
       143 天前
    用 docker 的 dev container
    LaureatePoet
        61
    LaureatePoet  
       143 天前
    poetry
    HiddenNPC
        62
    HiddenNPC  
       143 天前
    专业和非专业都推荐:miniconda
    frostming
        63
    frostming  
       142 天前
    请大家不要再问「有没有好用的 Python 版本、虚拟环境和包管理的工具」这种问题了。这里出现一百个答案,题主还知道要用什么吗?而且题目明明拉黑 conda 了,下面还一堆 conda 的。

    要提问,请先明确使用场景。你是做 ML 开发多,还是 web 开发多,还是爬虫?
    没有哪一个包管理器是银弹。你闭着眼睛推荐一个,他一用不符合场景,回头还得骂一声垃圾。
    ifsclimbing
        64
    ifsclimbing  
       140 天前
    asdf + pdm
    ZX576
        65
    ZX576  
       136 天前
    @Nugine0

    docker + poetry

    - 预先多做一些不同 python 版本的 base image ,甚至一些基础共有包也打进去,解决 1/2/3
    - 使用 poetry 做版本管理,解决 4/5/6/8

    总的来说指定的项目中可能包含多个不同的 docker file ,一份 pyproject.toml 和 poetry.lock 文件

    不太懂 7 的意思。
    frostming
        66
    frostming  
       135 天前
    @Nugine0 你说这些 PDM 都支持啊,有什么问题?
    akaHenry
        67
    akaHenry  
       43 天前
    推荐 rye 吧. 也是前 flask 作者出品.

    https://github.com/astral-sh/rye


    1. 目前 应该是唯一良好支持 workspace 模式的(类似 rust cargo), 比较方便管理 monorepo.

    2. 功能已经覆盖 poetry + pdm + pyenv. (这样可以完全替代 pyenv + poetry)

    3. 集成 uv(替代 pip), 安装包速度更快.


    成熟可靠方案: pyenv + poetry + 全局 venv 模式.

    1. 过去长期使用 pyenv + poetry. 比较偏好 pyenv 的全局管理的 venv. 不过 rye 的 local venv + workspace, 就很棒, 完美规避 venv 管理的麻烦. (没有 workspace, local venv 很难管理)


    不推荐: pdm

    1. pdm. 短暂使用, 就弃用. 有不少 bug. 和 pyenv 协调性很差, 终端自动激活 venv, 始终有 bug.

    2. 功能完备度低于 poetry, 目前更是不如 rye. (题外: 就算不用 rye, 我也不会用 pdm, 那么多人吹, 我的体验就很差)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   876 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:18 · PVG 04:18 · LAX 13:18 · JFK 16:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.