在 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.9
boost1.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