支持 PEP 582 的 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
frostming
V2EX    Python

支持 PEP 582 的 Python 包管理器,和虚拟环境说再见

  •  
  •   frostming
    frostming 2020-02-21 21:53:12 +08:00 5327 次点击
    这是一个创建于 2124 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们需要又一个新的包管理器吗? I don't think so! 包管理器已经够乱了

    在 virtualenv 20.0.0 经历了大升级以后,pyenv virtualenv virtualenvwrapper poetry 这一套已经足够好用。但,What's more? 有没可能完全抛弃 virtualenv? PEP 582 就是答案。

    Yes!! 春节宅家防疫撸代码,自造包管理器 pdm 已经发布 0.2.4 版本


    17 条回复    2021-09-22 21:32:48 +08:00
    nightwitch
        1
    nightwitch  
       2020-02-21 22:18:58 +08:00
    包管理器和虚拟环境不应该是独立不相关的两个组件吗
    shidenggui
        2
    shidenggui  
       2020-02-21 22:23:07 +08:00
    支持,一直希望能有个独立于虚拟环境管理的包管理器。
    frostming
        3
    frostming  
    OP
       2020-02-21 22:5:52 +08:00
    @nightwitch 是的没错
    1. 如果你用 Pipenv 和 Poetry,那就是一个工具,包管理和虚拟环境都有
    2. 如果你用 pip,那就是包管理+虚拟环境得分别两个工具
    3. 但如果你用 pdm,压根就不需要虚拟环境
    rogwan
        4
    rogwan  
       2020-02-21 22:53:51 +08:00 via iPhone
    什么时候 pycharm 换掉 virtualenv,再跟着换
    rogwan
        5
    rogwan  
       2020-02-21 22:55:37 +08:00 via iPhone
    出了部署的时候会动手布置 venv,日常都是用 IDE 如 pycharm 里默认的 virtualenv 很方便
    secsilm
        6
    secsilm  
       2020-02-21 22:58:35 +08:00 via Android
    conda 这么没存在感吗
    frostming
        7
    frostming  
    OP
       2020-02-21 23:00:44 +08:00
    @rogwan virtualenv 最新版已经和 venv 差别不大了
    frostming
        8
    frostming  
    OP
       2020-02-21 23:01:58 +08:00
    @secsilm conda 在管理 C extension 很多的库这方面地位无可动摇,我也不打算动摇
    ClericPy
        9
    ClericPy  
       2020-02-22 01:03:15 +08:00
    随手试了下, 安装挺快的, 不用像以前一样折腾 shiv 了

    不过解释器部分感觉怪怪的, init 的时候没有解释器参数, add 的时候, __pypackages__ 里文件夹是我默认 3.7 没错, .pdm.toml 文件里的解释器路径也是 3.7 的没错, 但是 add 的库给我下载的全是 py2 的 whl...... 当场凌乱了

    certifi-2019.11.28-py2.py3-none-any.whl
    chardet-3.0.4-py2.py3-none-any.whl
    futures-3.1.1-py2-none-any.whl
    idna-2.6-py2.py3-none-any.whl
    requests-2.18.4-py2.py3-none-any.whl
    torequests-4.9.2-py2-none-any.whl
    urllib3-1.22-py2.py3-none-any.whl
    ClericPy
        10
    ClericPy  
       2020-02-22 01:08:56 +08:00
    复现方式
    1. pdm init
    2. pdm add futures
    3. 执行脚本的 py 文件只要一行 from concurrent.futures._base import FIRST_COMPLETED
    主要就是 concurrent.futures._base 覆盖了默认 python3.7 的, 但是里面 381 行语法是 python2 的

    我这全局 python 是 3.7 的, 和 python2 共存, windows10, pylauncher 的 py.exe 默认也是 3.7
    Cbdy
        11
    Cbdy  
       2020-02-22 09:51:02 +08:00 via Android
    其实,Docker 主要就是为 Python 设计的
    frostming
        12
    frostming  
    OP
       2020-02-22 11:30:07 +08:00
    @ClericPy 感谢,已重现 https://github.com/frostming/pdm/issues/48

    确实 Python 包太多样了,什么问题都有可能出现,自己用是测不全的
    ClericPy
        13
    ClericPy  
       2020-02-22 12:19:46 +08:00
    @frostming #12 期待 new release

    提几个小需求, 不是很重要那种:

    1. 目前升级单个 package 的语法是什么没找到, 之前 pipenv 升级单个包的那个命令有 bug, 然而 fix 的版本没 release 到 pypi 上, 坑惨我了, 楼主作为贡献者, 知道为啥 pypi 最新版本还是 2018 那个么

    2. 有清理掉当前目录 pdm 全部相关文件夹的指令么, 有时候要重建 init, 发现旧的 __pypackages__ 似乎留下了, 有时候又纯粹想清理清理

    3. 有计划支持 PEP 441 那种把整个项目打包成 pyz 么, 就是 linkedin/shiv 做的那样类似的, 毕竟依赖什么的都收集好了, 单文件发布的时候更省力气, 不过好像又和 pdm 初衷不太接近
    frostming
        14
    frostming  
    OP
       2020-02-22 14:29:59 +08:00   1
    @ClericPy
    1. pdm update <package> 而且可以指定是只升级此 package,依赖不动,还是升级此 package 及其递归依赖,其他无关依赖不动,不给<package>就升级所有依赖。
    2. 我理解这个动作比较 trivial,毕竟__packages__目录直接 rm -r 就好
    3. 这个可能超出 scope 了,和 vendorize 一样,不是把包放一起就行了,涉及到 Import 的修改
    AndyAO
        15
    AndyAO  
       2021-09-18 18:41:58 +08:00
    作者,梦开始的地方,Star 支持下。
    frostming
        16
    frostming  
    OP
       2021-09-22 09:34:09 +08:00   1
    @ClericPy 一年过去了,回头看你提的第 3 个需求,现在已经支持了,不过是通过插件(顺便 pdm 写插件超好写): https://github.com/frostming/pdm-packer
    ClericPy
        17
    ClericPy  
       2021-09-22 21:32:48 +08:00
    @frostming 居然还记得呢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5653 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:02 PVG 11:02 LAX 19:02 JFK 22:02
    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