推荐学习书目
› 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
jqtmviyu
V2EX  ›  Python

请教下 Python 上的包管理器和虚拟环境

  •  
  •   jqtmviyu · Apr 12, 2024 · 13104 views
    This topic created in 944 days ago, the information mentioned may be changed or developed.

    刚学 python, 对这方面不是很了解. 对 npm 比较熟悉, 所以拿 npm 来类比.

    1. 流行的 python 版本管理器是 pyenv 吗? 类似 nodejs 上的 fnm n nvm
    2. 流行的 env 环境是 3.3 开始自带的 venv 吗? 还是 poetry (感觉用起来很麻烦)
    3. 有类似 pnpm 使用硬链接减少磁盘占用的方案吗?
    4. 有办法让 shell(zsh) 进入目录自动 activate env 吗? 类似识别 .nvmrc 文件自动切换

    目前是使用 pyenv + venv

    1. vscode 能自动切换版本, 但 shell 方案没找到
    2. pyvenv.cfg里都是绝对路径,python 版本或者项目改名/移动路径岂不是很麻烦
    3. 测试新建项目, pip install -r requirements.txt 又从网络重下了一遍

    是我搜索能力太差还是本来就这样, 怎么感觉比 js 生态还原始.

    45 replies  •  2024-05-10 16:26:00 +08:00
    AilF
    AilF
    Apr 12, 2024
    1
    python 包管理和虚拟环境工具还是挺多的,可参考:
    https://alpopkes.com/posts/python/packaging_tools/
    ysc3839
    ysc3839
    Apr 12, 2024 via Android
    2
    1. 个人感觉 pyenv 没那么流行,因为 pyenv 要在本机编译,会很耗时。要用系统包管理没提供的版本的话,Ubuntu 可以用 deadsnakes ppa 源,macOS 可以用 Homebrew ,其他系统如 CentOS 可以用通用的 MiniConda 。
    2. 我自己是习惯用 venv 。
    3. 似乎无?
    linvaux
    linvaux
    Apr 12, 2024
    3
    直接用 miniconda 不就好了
    NessajCN
    NessajCN
    Apr 12, 2024
    4
    用这个吧
    https://github.com/astral-sh/uv
    自动 source 就在 .zshrc 里加 . .venv/bin/activate
    AilF
    AilF
    Apr 12, 2024❤️2
    5
    最近又出了个 uv ,速度特别快,但我习惯用国内作者开源的 pdm
    Jirajine
    Jirajine
    Apr 12, 2024
    6
    js 生态可不原始,一直都是最具活力的生态。
    python 现在现代的工具链就 rye 吧 https://rye-up.com/
    相当于 rustup for python 。
    crackidz
    crackidz
    Apr 12, 2024
    7
    1. shell 里 pyenv 支持 .python-version 文件指定 Python 版本,但是大部分时间一下其实不是选择版本而是激活虚拟环境
    2. poetry 使用起来常用命令并不多,最多的还是 poetry add == npm add --save ...
    3. 没有
    BBCCBB
    BBCCBB
    Apr 12, 2024
    8
    环境管理用 miniconda, 注入配置后是可以进去到对应目录自动切换 shell 环境的
    coolair
    coolair
    Apr 12, 2024 via Android❤️1
    9
    说句实话,现在 python 的虚拟环境管理没有一个好用的,如果不用切换 python 版本,就用自带的 venv 。
    等哪天 rye 完成历史使命了,功能合并到 uv 里去了,就用 uv 吧。
    chengxiao
    chengxiao
    Apr 12, 2024
    10
    pip 一把梭 虽然 python 的包管理狗屎但是也比 npm 好......
    另外 python 包的小心比 npm 占用要小的多的多
    yolee599
    yolee599
    Apr 12, 2024 via Android❤️1
    11
    喜欢用自带的 venv ,如无必要,勿增实体
    mikaelson
    mikaelson
    Apr 12, 2024
    12
    以前我也很爱用 pyenv
    后来我用了 conda ,回不去了
    zcf0508
    zcf0508
    Apr 12, 2024 via Android
    13
    用 rye
    paopjian
    paopjian
    Apr 12, 2024
    14
    我更奇葩,miniconda 装 python,再用 venv 启动虚拟环境,activate 后 pip 装包
    Alliot
    Alliot
    Apr 12, 2024 via Android
    15
    😳一直 venv pip 的路过。。。
    jqtmviyu
    jqtmviyu
    OP
    Apr 13, 2024
    16
    @chengxiao #10 3.? 后面不让一把梭, 强制要开隔离环境. 然后我就开始注意到包的版本隔离问题和离线缓存问题.
    zhanghua0
    zhanghua0
    Apr 13, 2024
    17
    我现在倒是用的 poetry ,好处就是不用自己花心思在虚拟环境上,它会维护虚拟环境,想进虚拟环境执行 poetry shell 就行,但平时反而不需要这么做,因为它其实是打开一个虚拟环境里面的 shell 。如果仅仅是执行虚拟环境里面的某个指令只需要 poetry run xxx 这样就行。
    ShawnSky
    ShawnSky
    Apr 13, 2024 via iPhone
    18
    Conda 一把梭
    jqtmviyu
    jqtmviyu
    OP
    Apr 13, 2024
    19
    @NessajCN #4 看起来前景不错, 但我遇到一个问题, 似乎不支持设置镜像, --trusted-host 还在讨论中
    1800ml
    1800ml
    Apr 13, 2024
    20
    miniconda
    gmsy
    gmsy
    Apr 13, 2024
    21
    在尝试使用 rye ,但 vscode 不能自动识别 rye 安装的 python 解释器
    knightdf
    knightdf
    Apr 13, 2024
    22
    poetry+pyenv
    l1xnan
    l1xnan
    Apr 13, 2024
    23
    rye + uv + ruff 用起来还算流畅
    julyclyde
    julyclyde
    Apr 13, 2024
    24
    1 以 python 的发展速度,似乎多版本管理器并没什么价值啊?
    4 那其实开销更大,需要在 PS1 里做手脚吧
    Easedge
    Easedge
    Apr 13, 2024
    25
    第四个问题 direnv 可以做到,非常简单
    qYs9wxnXG96c6z1t
    qYs9wxnXG96c6z1t
    Apr 13, 2024 via iPhone
    26
    我一般是 pyenv + pipenv
    imycc
    imycc
    Apr 13, 2024
    27
    就我个人而言,pyenv + pyenv 的 virtualenv 就足够。
    pyenv virtualenv 的组合很方便,在项目目录下设置下 pyenv local 指定你要用的 venv ,vscode 之类的可能也要选一下,设置一次之后就没有什么烦恼了。
    zzhaolei
    zzhaolei
    Apr 13, 2024
    28
    4 可以自己设置 zsh 的 cd hook ,当发现当前目录有 venv 或者 .venv 就自动 source
    574402766
    574402766
    Apr 13, 2024
    29
    4 pyenv 和 conda 应该都能做到
    iorilu
    iorilu
    Apr 13, 2024
    30
    自己玩玩可以折腾

    如果正式环境或公司开发建议用 miniconda, 不建议花时间在折腾这事上面
    jqtmviyu
    jqtmviyu
    OP
    Apr 14, 2024
    32
    @zhanghua0 #17 poetry 似乎会绑定当前的 python 环境, 官方文档也说需要单独提供环境.

    这可能导致问题就是, 你在 3.12.1 安装的 poetry, 后来升级到 3.12.2, 它还是绑定的 3.12.1, 你不能卸载了它.
    jqtmviyu
    jqtmviyu
    OP
    Apr 14, 2024
    33
    @zzhaolei #28 不错. chpwd 钩子
    jqtmviyu
    jqtmviyu
    OP
    Apr 14, 2024
    34
    @Easedge #25 非常棒, 会自动加载卸载, 更简便了.
    jqtmviyu
    jqtmviyu
    OP
    Apr 14, 2024
    35
    感谢楼上的各位: 暂时采纳 pyenv + uv + direnv

    pyenv 管理版本
    uv 代替 pip, 会优先使用本地缓存
    direnv 自动激活 venv
    mingwiki
    mingwiki
    Apr 15, 2024
    36
    @yolee599 #11 最近发现 wsl2 里面的 venv 无法隔离环境,换了 virtualenv 才好。服务器里面的 venv 是正常的。所以推荐 virtualenv
    supergeek1
    supergeek1
    Apr 15, 2024
    37
    @paopjian 差不多的流程,不过我是用的 micromamba 装 python
    mMartin
    mMartin
    Apr 15, 2024
    38
    用 miniforge https://github.com/conda-forge/miniforge 用清华源 mamba 装包快的一批,我们自建了 conda 源
    frostming
    frostming
    Apr 15, 2024
    39
    3. 有类似 pnpm 使用硬链接减少磁盘占用的方案吗?

    再说三遍

    pdm 支持
    pdm 支持
    pdm 支持

    很遗憾没人知道
    zhanghua0
    zhanghua0
    Apr 15, 2024
    40
    @jqtmviyu #32 确实,不过我是在 Linux 这边,poetry 的更新都是交给软件包管理器的,所以这个问题影响不大,Python 更新的时候 poetry 也会一起被更新。
    Windows 那边估计真只能自己维护一下每次 Python 更新也要重新装一遍 poetry 了。
    iorilu
    iorilu
    Apr 19, 2024
    41
    @jqtmviyu 那你真不如用哪个 rye 了, 内部用的 uv, 自带安装各版本 python, 何必弄好几个东西
    jqtmviyu
    jqtmviyu
    OP
    Apr 19, 2024
    42
    @iorilu #41 哈哈, 我讨厌使用另外的一套命令. 特别是类似 poetry run 那种.
    miniconda 和 miniforge 也用不习惯. 习惯了自带的.venv 挺好用的. vscode 支持自动切换.
    pyKane
    pyKane
    Apr 20, 2024❤️1
    43
    想不明白上面都弄的那么复杂干嘛。
    包管理用 pip
    虚拟环境用自带的 venv
    咋就满足不了你们的需求了呢。
    多版本无非就是在系统里多装个不同版本的 Python ,然后在你的项目里 创建你需要的版本的 Python venv 环境就行了。开发哪个项目就过时去 source .venv/bin/activate 就开始干少顾。不是挺好么 pyCharm 对 venv 兼容性也非常好。
    对于新手来上,就用上面两个就行了。别整太复杂了,用 Python 就是为了干活的。不是折腾的。
    yucongo
    yucongo
    Apr 28, 2024
    44
    rye + uv: 又快有好。其实 rye 本身已经实验性直接植入 uv 了
    FkingMan
    FkingMan
    May 10, 2024
    45
    pyenv 就可以管理 python 版本和创建虚拟环境,不太需要 venv
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   996 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 22:13 · PVG 06:13 · LAX 14:13 · JFK 17:13
    ♥ Do have faith in what you're doing.