最近在本地 PC 的 Windows Subsystem for Linux (WSL) 上跑 Python 代码,程序在使用 hydra 的时候出现了 segmentation fault 错误。Google 可知这个错误发生在 Python 调用 C 语言代码的时候,属于比较底层的问题。由于之前在服务器上都没有发生过这个故障,加上 StackOverflow 上有人发帖反映也是在使用 Ubuntu 22.04 时出现这个问题,有没有可能是 Ubuntu 22.04 系统本身的 bug 呢?果然,重新安装了 Ubuntu 20.04 后,问题解决。
说到这里,有必要指出,在 Python 和 Linux 界,最新的软件包并不一定是最好的——这和装机界、手机界的情况有很大区别。
一方面,负责开发 Linux 发行版的团队构成互不相同,而它本身也不是一个盈利的项目,这些年来围绕开发产生的各种狗血剧情也是数不胜数,这势必造成版本的质量控制无法同 Windows 相比,指望他们对用户负责只能呵呵呵。
另一方面,Python 的各种包更新很快,有时新版包会移除旧版包里的一些函数,而这些函数有可能被其他包所调用。这就造成了即使按照 environment.yml 来配置环境,如果作者没有细致地写清每一个包的版本,那么由于时间推移,就有可能导致一些包被自动安装了与其他包冲突的最新版,从而使得代码无法运行。这时,通过观察故障包的名称,安装相应的旧版可能会解决问题。