アルパインでアップグレード可能なPythonパッケージがアップグレードされないのはなぜですか?

アルパインでアップグレード可能な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への依存関係は、soPython 3.10の競合リストには表示されず、Python 3.9の満足者リストにのみ表示されるため、最初は解析するのが少し困難です。しばらくすると、これがアップグレードを妨げていることが明らかになります。libpython3.9boost1.76-python3

高山地帯の一般的な状況は次のとおりです。

  • site-packagesコンポーネントがあるが依存するコンパイルされた拡張機能を持たないPythonパッケージlibpython(例:)は、onboard必要な特定のPythonマイナーバージョンへの依存関係をリストしません。lib礼拝規則site-packages
  • ブーストのPythonサポートのようなものはlibpython実際にはファイルによって異なり、so最終的には特定のPythonパッケージのバージョンによって異なります。
  • ブーストのようなものは、時々、各バージョンごとに異なるパッケージ名を持つようにパッケージ化されます(たとえばboost1.76、別のパッケージ())、それ自体ではアップグレードすることが解決策であることはわかりません。boostboost*-python3boost1.77-python3apk

ローリングリリースは、リリースのさまざまなパッケージ間のパッケージング方法の違いにより、いくつかの障害に直面しました。

問題のある古いパッケージを削除してください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

関連情報