11
26
2019
11

Python 3.8 升级记录

本文来自依云's Blog,转载请注明。

Python 3.8 发布有好多天了,Arch Linux 也早就重新打包了一千多个包(感谢辛勤的肥猫猫),隔天就从 [staging] 进入 [testing] 了,四天之后进入正式仓库([extra] 和 [community])。

Python 3.8 进入官方仓库的次日,我本地进行了更新。之所以要等一天,自然是等 [archlinuxcn] 的更新啦。然后那些需要人工干预而又暂时没人理的我本地重新打包了。使用 pacman -Qo /usr/lib/python3.7/site-packages 查询尚未更新的软件包,然后对着对应的 PKGBUILD 一顿改(基本上也就是 pkgrel 加 0.1 而已),makepkg -si 就好了。

但是这样还没完事哦。

sudo updatedb 更新一下 mlocate 的数据库。然后 locate -be python3.7 | grep -v /var/lib/lxc 找到一些残留的文件,主要是 ~/.local/lib 下的,以及散落在管理之外的 venv 里的。~/.local/lib 下的都是我自己的项目,删掉然后重新去项目里 python setup.py develop --user 就好了。venv 的话,直接删掉吧……

然后是 locate -be python-37 | grep -v /var/lib/lxc | grep -v /usr/lib/python3.7/site-packages。这个是为了查 Python 3.7 的 pyc 文件,所以这次也排除了 Python 3.7 的 site-packages,避免尚未更新的 Python 包的干扰(有些暂时用不到的包我就懒得自己 makepkg 了),等更新完之后整个目录删掉。有些软件包(比如 gdb-common)没有使用标准的 Python 安装流程(比如因为并不是标准的 Python 库),打包者(比如著名的 Allan McRae)没有或者拒绝在打包时编译 pyc 文件,造成 Python 自行创建不被管理的 pyc 文件,软件包卸载或者 Python 升级后就残留下来了。

确认没有问题之后(比如有些软件可能自带了个旧版本的 Python,或者有些并不是 pyc 的文件也包含这个字符串),执行 locate -be python-37 | grep -v /var/lib/lxc | grep -v /usr/lib/python3.7/site-packages | sudo xargs rm -v 删除这些文件。当然如果有需要保留的文件自行从文件列表中删掉先。

pyc 清理之后,接下来清理一下空的 __pycache__ 目录啦。locate -be __pycache__ | sudo xargs rmdir -v 2>/dev/null 就可以了,非空目录不会被删掉的。

哦对了,我现在在用 mypy 了,所以还要 locate -we .mypy_cache/3.7 一下。

我之所以现在记录这事儿,「现在」的原因是,我要在另一个系统上再测试一遍再发布出来,「记录」的原因是,下一次我就不用想要执行哪些命令了。

Category: Linux | Tags: linux python Arch Linux | Read Count: 211087
x b y 说:
Dec 12, 2019 01:47:42 PM

你是在做Linux的包发布吗?有没有考虑用容器来做打包环境?
我目前都是在容器里做RPM,感觉不用操心环境不干净的问题了。

Avatar_small
依云 说:
Dec 12, 2019 03:54:46 PM

是清理我自己的系统。

我从来不用担心打包环境干不干净,因为 Arch Linux 有专门的工具。Debian 那边好像也有。只有 rpm 他们竟然连这么基础的东西都木有……

x b y 说:
Dec 12, 2019 05:37:43 PM

上头指定了rpm,就rpm了,哈哈。
对了,pyc这个问题我一直没有注意,我觉得打进去会增加包的大小还有最后一步压缩的时间。文件残留可以在包卸载脚本了连同目录一起rm掉。在包里记录pyc很有必要吗?仙子怎么看?
另外现在mypy靠谱吗,1年多前试了下发现效果不太理想(可能那时候PEP484还不普及)?平时用vim ale,适合一起用吗?还是要装其他的插件?

Avatar_small
依云 说:
Dec 12, 2019 06:22:18 PM

pyc 是编译产物。你打包进去的话,就不用安装的时候花 CPU 编译了。另外作为通用策略,千万不要忘了编译 pyc。没有 pyc 时部分库加载会很慢的,而加载时又不一定对 pyc 所应在目录有写权限。

我的意见是把 pyc 打包进去,省心又省力。导致我需要手动清理的,一是部分没有打包 pyc 的包,二是我自己散落在各处的文件。

mypy 不是很完善,但用来辅助编码和重构是相当好的。ale 我没用过。我现在也没有配置自动调用 mypy 检查。我甚至连 pre-commit hook 都没配……如果你常用的话可以配一下。

x b y 说:
Dec 12, 2019 07:05:03 PM

aha!文件权限的问题这个细节我从来没考虑到。(开发的产品有固定用户名所以没想到这个问题)

我想到的一个问题就是预编译了pyc后如果包只含脚本,就不能作为noarch的模式了,必然是x64或者i686的一种。但听了你的描述以后感觉预编译是利大于弊!

整个团队除了我都被安利用vscode remote了,个人觉得萝卜青菜各有所爱。(ale/vim-autoformat) X (python-language-server/flake8/eslint/pretter/autopep8) 基本上可以做到web dev IDE所有能做到的事情了。最近还学会了nnoremap <silent><F1> :popu MyMenu<CR>,这样连上了年纪记不住快捷键的问题都解决了。。完美

Avatar_small
依云 说:
Dec 12, 2019 07:34:16 PM

我在文档里没有看到 pyc 在不同架构上不一致的说明(也没有说是一致的),但 Arch Linux 以前同时支持 i686 和 x86_64 的时候也这么干,也没出啥问题。(当然它们是只能用于同一版本的解释器的。)

哇,popup 你都用上了!对了,Vim 现在有弹出窗口的支持了,说不定你还可以搞更强大的弹窗出来呢。

x b y 说:
Dec 12, 2019 08:48:15 PM

我已经决定在产品的下一个版本里打包pyc文件了,也引用社区专家的建议发信让负责kubernetes的同事在docker build的时候做同样的事情,感觉在overlay fs里写缓存文件更不好。用了“she"不知道合不合适:)
今天有好多收获,感谢仙子
(平时用putty,但它不支持很多功能,连balloon都弹不出来,难受,有时间摸鱼的时候试试魔改一下)

Avatar_small
依云 说:
Dec 13, 2019 12:16:46 AM

「she」没问题。
putty 不就是个终端吗。终端里的 Vim 可以自己画个小窗口显示 balloon 的,效果比 gVim 是差了不少。

Avatar_small
依云 说:
Dec 13, 2019 12:25:08 AM

哦,需要知道鼠标的位置。试试 set ttymouse=sgr 或者 xterm2 呢?

x b y 说:
Dec 20, 2019 04:05:32 PM

哎。Putty 没有实现这个功能,所以不魔改源代码应该是没戏。。,https://github.com/vim/vim/issues/3208#issuecomment-405080425

看到github上有人贴了弹窗的草案,还挺炫酷的!不过我的vim才8.1 需要重新编译一个vim,然后忽然想起了以前编译vim的复杂参数,想了半个小时想起来贴在github的某个帖子上,还在你的评论后面。。。
https://github.com/vim/vim/issues/2925#issuecomment-514109918


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com