我最近从基于 Ubuntu 20.04 的发行版切换到 openSUSE Leap 15.4。虽然我对 SUSE 的一些打包决策感到比较满意,但其他一些决策却让我感到困惑。
作为一名 Python 开发人员,我一直在 Ubuntu 上使用 Python 3.8,令我惊讶的是 openSUSE Leap 15.4 尽管是较新的发行版,但仍然附带 Python 3.6,而 Python 3.6 已经 EOL(请参阅日程安排)。
使用 3.6 作为默认系统 Python 会导致一些重大问题:
- 使用 Python 的 EOL 版本存在潜在的安全风险。即使 SUSE 已经接管了他们分发的版本的开发,我怀疑维护也不会像上游仍在提供支持那样积极和受到良好的监督。
- 考虑到 Python 3.6 已停产,许多 Python 软件包已不再支持它。因此,受影响的开发人员必须通过向后移植存储库安装较新的 Python 版本,例如 3.10。
- 然而,这有许多缺点。由于许多系统提供的包只是通过子进程定位
#!/usr/bin/python3
或调用python3
,因此您无法安全地重新链接python3
到python3.10
. - 较新的 Python 的存储库包集大大减少,这意味着它与系统的集成程度较低。
- 例如,如果您想使用 LibreOffice 的 Python 绑定,这是不可能的,因为它们与 Python 3.6 绑定。如果您需要在还包含依赖于
Python >3.6
. - 同样,您不能使用系统提供的 PySide2/PyQt5 软件包,因此除非您愿意从源代码构建它们,否则您必须安装 Qt 的另一个副本,而不是动态链接到系统的 Qt。这在安全性、磁盘空间和应用程序风格方面都是不利的(因为第三方安装的 Qt 无法正确访问系统主题)。
- 一般来说,通过 PyPI 安装带有二进制扩展的包并不优雅,因为这些包可以很好地链接到系统库。
- 例如,如果您想使用 LibreOffice 的 Python 绑定,这是不可能的,因为它们与 Python 3.6 绑定。如果您需要在还包含依赖于
所有这些让我想知道为什么 SUSE 决定发布 Python 3.6?这个决定背后的理由是什么?
我现在应该怎么做?尝试从源代码安装所有需要的软件包?或者,作为最后的手段,再次更改分配?
答案1
15.4 是第四次更新,依赖于 SLES 的源。因此,由于这是针对那些不喜欢更改的公司,因此他们倾向于坚持使用最初发布的任何版本,并且只发布修复程序。
SLES 15 是使用旧的 python 版本发布的,因此,如果可以的话,他们将坚持使用该版本,直到 SLES 16 发布为止,可能不会再过 2 年,因为 15.5 版本似乎即将发布。
15.4 虽然附带了 python 3.9 和 3.10,但可能不是您需要的所有子包。
这是一个商业决定。