求问一个 Cascadia Code 字体编译的 python-attrs 问题

我的一个打包 cascadia-code-fonts 目前在 openSUSE Tumbleweed 下面可以正常编译,但是在 openSUSE Leap 15.2 下面不能正常编译。
https://build.opensuse.org/package/live_build_log/home:nuklly/cascadia-code-fonts/openSUSE_Leap_15.2/x86_64

https://build.opensuse.org/package/live_build_log/home:nuklly/cascadia-code-fonts/openSUSE_Tumbleweed/x86_64

根据编译器报错,说"eq"这个是 Python 关键字不能作为参数,但是为什么 Tumbleweed 下面又可以编译呢?是因为 Leap 和 Tumblewwed 下面的 Python 版本不同吗?

咦?不觉得 eq 是 Python 关键字啊。

这个应该是 Python 库更新了 attrib 那个函数,导致了不兼容。

检查一下你的 Python 依赖库的版本

@xzhao

你这个说起来有点复杂。分析过程:

Leap 15.2 的 buildlog 我看了,cascadia-code-fonts 用 fontmake 编译自己,在 vendor 里 bundle 了一份 fontmake,fontmake 依赖 ufoLib2,同样也是 bundle 的。问题出在 ufoLib2 的 objects/misc.py。

所以实际上是编译工具出了问题。

ufoLib2 用 python-attrs 实现面向对象。后者在 19.1->19.2 的 changelog 里 deprecated 了 cmp,用 eq 替代。也就是说:

attrs.ib (eq=False)

这个用法在 python-attrs 19.2 以上版本才有,以下版本是

attrs.ib (cmp=False)

知道这点,我们去 ufoLib2 的 objects/misc.py 的 history 里看 commits:

这条。反着改就是对 Leap 15.2 的修复。

看到你的修复和你的提交了。但是我觉得一个只支持 Factory 的更新不算一个 “好” 的更新,尤其是在修复 Leap 15.2 如此简单的情况下…

说到底就是对 python 的 err output 不熟,把 python-attrs 提供的函数看成 python3 的 builtin funcs 了,所以才会觉得没法修…

我确实对 python 不太熟悉。不过明白了,我会修改支持 15.2 之后再重新提交,感谢!

我也是杂而不精…打包能让你接触好多种编程语言,重点号,的错误。不断的 google 错误就会一点一点摸到这个编程语言正确的样子,再看看语法就会写一点了。

看起来没那么简单,除了 cmp 和 eq 之外,旧版本的 python-attrs 还不支持 kw_only 参数,看来只能取消新版本的提交了。

同样方法去 ufoLib2 里找…python-attrs 从 19.1->19.2 一共也没改啥

python-attrs 在 Leap 15.2 里面的版本是 17.4.0。 @marguerite

但是 ufoLib2 不是这所有的 change 它都有用啊,好比 python 2.7 到 python 3.7 可能有成千上万的 changes,但是我就写个 hello world 又能遇到多少变化呢?ufoLib2 一共才 241 个 commits…集中到应对 python-attrs 版本变化的 commit 可能也就几条…

可能改了 ufoLib2 更多部分的话,其他依赖 ufoLib2 的部分也需要改,我有空的时候仔细看一下。@marguerite

存在这种可能性。不过库的定义就是接口独立于实现,可能性比较小。