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

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

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

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

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

    虚拟环境:python venv

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

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

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

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

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

    要提问,请先明确使用场景。你是做 ML 开发多,还是 web 开发多,还是爬虫?
    没有哪一个包管理器是银弹。你闭着眼睛推荐一个,他一用不符合场景,回头还得骂一声垃圾。
    ifsclimbing
        64
    ifsclimbing  
       2023-12-09 20:37:34 +08:00
    asdf + pdm
    ZX576
        65
    ZX576  
       2023-12-13 18:26:46 +08:00
    @Nugine0

    docker + poetry

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

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

    不太懂 7 的意思。
    frostming
        66
    frostming  
       2023-12-14 08:41:43 +08:00
    @Nugine0 你说这些 PDM 都支持啊,有什么问题?
    akaHenry
        67
    akaHenry  
       276 天前
    推荐 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   ·   实用小工具   ·   5151 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:28 · PVG 09:28 · LAX 17:28 · JFK 20:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.