在 alpine 中,为什么可升级的 python 包不会升级?

在 alpine 中,为什么可升级的 python 包不会升级?

在 Alpine Edge 中,我已经安装了软件包onboard,但无法启动。

$ onboard
Traceback (most recent call last):
  File "/usr/bin/onboard", line 32, in <module>
    from Onboard.Exceptions import chain_handler
ModuleNotFoundError: No module named 'Onboard'

查看包的内容,它包含site-packages比安装的打包版本更新的 python 库,

$ apk manifest onboard
sha1:81dbaf3b78893bb5d5896fd023409f12e580e1e9  etc/xdg/autostart/onboard-autosta                                                                                                                                  rt.desktop
sha1:687e5d9bce3c7cc92caee337207058a62ada86df  usr/bin/onboard
sha1:3c77e2705f8b8b2150002f28d31c5382952f639a  usr/bin/onboard-settings
sha1:40980337b28834148ec974557ca9c97000d88560  usr/lib/python3.10/site-packages/                                                                                                                                  onboard-1.4.1-py3.10.egg-info
[...]
$ apk list --installed python3
python3-3.9.7-r4 x86 {python3} (PSF-2.0) [installed]

我以为 3.9 是最新的可用 python 打包版本,但实际上不是:

$ apk list python3
python3-3.9.7-r4 x86 {python3} (PSF-2.0) [installed]
python3-3.10.1-r0 x86 {python3} (PSF-2.0) [upgradable from: python3-3.9.7-r4]

但 3.10 软件包upgradable实际上无法升级:

$ sudo apk upgrade python3
OK: 451 MiB in 1036 packages

仔细检查它是否没有被版本约束固定world

$ grep python /etc/apk/world
python3
python3-dbg
python3-tkinter

不。

怎么了?

答案1

如果您尝试固定新的 python 版本,您将获得阻碍升级的其他依赖项的详细列表:

$ sudo apk add python3=3.10.1-r0
ERROR: unable to select packages:
  python3-3.9.7-r4:
    conflicts: python3-3.10.1-r0 python3-3.10.1-r0[so:libpython3.so=0] python3-3.10.1-r0[cmd:2to3=3.9.7-r4] python3-3.10.1-r0[cmd:pydoc3=3.9.7-r4] python3-3.10.1-r0[cmd:python3=3.9.7-r4]
    breaks: world[python3=3.10.1-r0]
    satisfies: glib-dev-2.70.1-r0[python3] py3-gobject3-3.42.0-r2[python3] py3-dbus-1.2.18-r1[python3] onboard-1.4.1-r6[python3] blueman-2.2.3-r1[python3] terminator-2.1.1-r2[python3]
               py3-pygdbmi-0.10.0.0-r2[python3] py3-configobj-5.0.6-r9[python3] py3-six-1.16.0-r1[python3] boost1.76-python3-1.76.0-r2[so:libpython3.9.so.1.0]
  python3-3.10.1-r0:
    conflicts: python3-3.9.7-r4 python3-3.9.7-r4[so:libpython3.so=0] python3-3.9.7-r4[cmd:2to3=3.10.1-r0] python3-3.9.7-r4[cmd:pydoc3=3.10.1-r0] python3-3.9.7-r4[cmd:python3=3.10.1-r0]
    satisfies: world[python3=3.10.1-r0] glib-dev-2.70.1-r0[python3] py3-gobject3-3.42.0-r2[python3] py3-dbus-1.2.18-r1[python3] onboard-1.4.1-r6[python3] blueman-2.2.3-r1[python3] terminator-2.1.1-r2[python3]
               py3-pygdbmi-0.10.0.0-r2[python3] py3-configobj-5.0.6-r9[python3] py3-six-1.16.0-r1[python3] gdb-11.1-r1[so:libpython3.10.so.1.0]

一开始解析起来有点困难,因为阻碍升级的东西,即对from 的so依赖,没有出现在 python 3.10 的冲突列表中,它只出现在 python 3.9 的满足列表中,但在无论如何,一旦您注意到这一点,就会清楚这将阻碍升级。libpython3.9boost1.76-python3

在高山地区,一般情况是这样的:

  • site-packages带有组件但没有依赖于 的已编译扩展的python 包libpython,例如onboard,不会列出对它们所需的特定 python 次要版本的依赖项,即使它们显然依赖于它才能工作,因为它位于lib它们的子目录的名称中用于site-packages
  • 像 boost 的 python 支持之类的东西libpython确实依赖于so文件,因此最终取决于特定的 python 包版本
  • 像 boost 这样的东西有时会被打包,这样它们就会为每个版本获得不同的包名称(例如boost1.76),所以即使显然boost仍然在发行版中并且在滚动版本中会有一个boost*-python3与当前 python 当代的包,它在技术上是不同的包 ( boost1.77-python3),并且apk不会自行发现升级到它是解决方案

由于发行版中不同包之间的打包方法存在差异,滚动发布遇到了一些障碍。

摆脱有问题的旧包boost1.76-python3

$ sudo apk del boost1.76-python3
World updated, but the following packages are not removed due to:
  boost1.76-python3: boost1.76-dev boost1.76

OK: 451 MiB in 1036 packages
$ sudo apk del boost1.76-dev
(1/1) Purging boost1.76-dev (1.76.0-r2)
OK: 277 MiB in 1035 packages
$ sudo apk del boost1.76
(1/34) Purging boost1.76 (1.76.0-r2)
...
(17/34) Purging boost1.76-python3 (1.76.0-r2)
...
(34/34) Purging boost1.76-serialization (1.76.0-r2)
Executing busybox-1.34.1-r5.trigger
OK: 268 MiB in 1001 packages

摆脱了障碍,现在apk upgrade将获得新的python:

$ sudo apk upgrade
(1/2) Upgrading python3 (3.9.7-r4 -> 3.10.1-r0)
(2/2) Upgrading gdb (11.1-r0 -> 11.1-r1)
Executing busybox-1.34.1-r5.trigger
OK: 269 MiB in 1001 packages

当然,boost1.77-python3如果需要,您可以安装新的。

$ sudo apk add boost1.77-python3
(1/1) Installing boost1.77-python3 (1.77.0-r3)
OK: 269 MiB in 1002 packages

相关内容