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

    我们需要又一个新的包管理器吗? 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:50: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   ·   实用小工具   ·   2464 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:58 · PVG 23:58 · LAX 07:58 · JFK 10:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.