我们需要又一个新的包管理器吗? I don't think so! 包管理器已经够乱了
在 virtualenv 20.0.0 经历了大升级以后,pyenv virtualenv virtualenvwrapper poetry 这一套已经足够好用。但,What's more? 有没可能完全抛弃 virtualenv? PEP 582 就是答案。
Yes!! 春节宅家防疫撸代码,自造包管理器 pdm 已经发布 0.2.4 版本
1
nightwitch 2020-02-21 22:18:58 +08:00
包管理器和虚拟环境不应该是独立不相关的两个组件吗
|
2
shidenggui 2020-02-21 22:23:07 +08:00
支持,一直希望能有个独立于虚拟环境管理的包管理器。
|
3
frostming OP @nightwitch 是的没错
1. 如果你用 Pipenv 和 Poetry,那就是一个工具,包管理和虚拟环境都有 2. 如果你用 pip,那就是包管理+虚拟环境得分别两个工具 3. 但如果你用 pdm,压根就不需要虚拟环境 |
4
rogwan 2020-02-21 22:53:51 +08:00 via iPhone
什么时候 pycharm 换掉 virtualenv,再跟着换
|
5
rogwan 2020-02-21 22:55:37 +08:00 via iPhone
出了部署的时候会动手布置 venv,日常都是用 IDE 如 pycharm 里默认的 virtualenv 很方便
|
6
secsilm 2020-02-21 22:58:35 +08:00 via Android
conda 这么没存在感吗
|
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 |
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 |
11
Cbdy 2020-02-22 09:51:02 +08:00 via Android
其实,Docker 主要就是为 Python 设计的
|
12
frostming OP |
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 初衷不太接近 |
14
frostming OP @ClericPy
1. pdm update <package> 而且可以指定是只升级此 package,依赖不动,还是升级此 package 及其递归依赖,其他无关依赖不动,不给<package>就升级所有依赖。 2. 我理解这个动作比较 trivial,毕竟__packages__目录直接 rm -r 就好 3. 这个可能超出 scope 了,和 vendorize 一样,不是把包放一起就行了,涉及到 Import 的修改 |
15
AndyAO 2021-09-18 18:41:58 +08:00
作者🐮🍺,梦开始的地方,Star 支持下。
|
16
frostming OP @ClericPy 一年过去了,回头看你提的第 3 个需求,现在已经支持了,不过是通过插件(顺便 pdm 写插件超好写): https://github.com/frostming/pdm-packer
|