2021-05-09
md
Péripéties avec python-is-python
<-Numérisation avec l'imprimante multifonction Brother DCP-7040 dans Mint 20.1 ou Ubuntu 20.04
 ToirtoiseHG et Virtual Box 6.1 dans Mint 20.1 

Voici un autre billet qui n'est certainement pas destiné à un grand public. Il y est question du conflit entre les paquets python-is-python3 et python-is-python2 lors de l'installation de TortoiseHg et de Virtual Box de Oracle sur Mint 20.1. Sans doute la source du problème est la présence simultanée des versions 2.7 et 3.8 de l'interpréteur Python et de l'ambiguïté quant à la commande python.

michel@hp:~$ python2.7 -rwxr-xr-x 1 root root 3674216 mar 8 09:02 /usr/bin/python2.7 lrwxrwxrwx 1 root root 9 mar 31 16:22 /usr/bin/python3 -> python3.8 -rwxr-xr-x 1 root root 5486384 jan 27 11:41 /usr/bin/python3.8 ...

Le paquet python-is-python2 ajoute un lien symbolique python vers python2 ce qui ultimement se traduit en un lien vers python2.7. De même python-is-python3 ajoute un lien vers python3 soit python3.8. Clairement, ces deux paquets sont mutuellement exclusifs.

Selon le journal de dpkg, l'installation de la version 6.1.18 de Virtual Box le 3 avril a été immédiatement précédée de celle de python-is-python2.

2021-04-03 09:32:23 install libgcc1:amd64 <none> 1:10.2.0-5ubuntu1~20.04 2021-04-03 09:32:23 install libqt5opengl5:amd64 <none> 5.12.8+dfsg-0ubuntu1 2021-04-03 09:32:23 install libsdl1.2debian:amd64 <none> 1.2.15+dfsg2-5 2021-04-03 09:32:23 install python-is-python2:all <none> 2.7.17-4 2021-04-03 09:32:23 install virtualbox-6.1:amd64 <none> 6.1.18-142142~Ubuntu~eoan

Il est surprenant qu'un logiciel élaboré par une grande entreprise et mis à jour aussi souvent utilise encore Python 2 alors que dès novembre 2008 la fondation Python annonçait la fin des versions 2.x de Python et, qu'effectivement, le dernier correctif (2.7.18) date du 4 avril 2020 (PEP 3.03).

Quelque jour plus tard, quand TortoiseHG (thg) a été installé sur Mint 20.1 Mate selon les instructions sur ask ubuntu/Stack Exhange, Virtual Box ainsi que python-is-python2 ont été éliminés du système.

michel@hp:~/thg$ sudo apt-get install python-is-python3 Lecture des listes de paquets... Fait ... Les paquets suivants seront ENLEVÉS : python-is-python2 virtualbox-6.1 Les NOUVEAUX paquets suivants seront installés : python-is-python3 0 mis à jour, 1 nouvellement installés, 2 à enlever et 2 non mis à jour. ...

Dans ce cas, l'installation du paquet python-is-python3 n'était pas un prérequis de thg, mais simplement la suggestion d'un individu pour s'assurer que le script était compilé avec la version 3 de Python. J'ai vérifié que l'intégration de TortoiseHG dans Caja fonctionnait après avoir éliminé le lien symbolique /usr/bin/python vers /usr/bin/python3 créé par le paquet python-is-python3. En revanche, je ne pouvais plus lancer ToirtoisHG Workbench depuis le menu MATE et un script bash qui lançait Workbench ne fonctionnait plus. J'estimais correctement qu'il serait facile de corriger ces problèmes et j'ai donc procéder à l'élimination de python-is-python3 et à la réinstallation de Virtual Box. Une nouvelle version, soit 6.1.22, de Virtual Box était disponible, mais python-is-python2 était encore un prérequis.

michel@hp:~$ grep "install " /var/log/dpkg.log ... 2021-05-08 18:29:22 install python-is-python2:all <none> 2.7.17-4 2021-05-08 18:29:23 install virtualbox-6.1:amd64 6.1.18-142142~Ubuntu~eoan 6.1.22-144080~Ubuntu~eoan michel@hp:~$ ls -l /usr/bin/python lrwxrwxrwx 1 root root 5 mai 15 2020 /usr/bin/python -> python2

Je ne voulais pas de ce lien vers python2 puisqu'il est préférabe de s'affranchir de cette version désuète. Malheureusement, on ne peut pas éliminer le paquet python-is-python2, car cela entrainerait l'élimination de Virtual Box. Heureusement, ce logiciel semble fonctionner correctement après l'élimination du lien symbolique python -> python2.

michel@hp:~$ sudo rm /usr/bin/python michel@hp:~$ ls -l /usr/bin/python* lrwxrwxrwx 1 root root 9 mar 13 2020 /usr/bin/python2 -> python2.7 -rwxr-xr-x 1 root root 3674216 mar 8 09:02 /usr/bin/python2.7 lrwxrwxrwx 1 root root 9 mar 31 16:22 /usr/bin/python3 -> python3.8 -rwxr-xr-x 1 root root 5486384 jan 27 11:41 /usr/bin/python3.8

Si tout ceci était à recommencer, je procèderais de la façon suivante pour avoir TortoiseHG et Virtual Box sur un système Mint 20.1.

  1. Télécharger la plus récente version de Virtual Box pour Ubuntu 19.10/20.04/20.10/21.04.
  2. Installer Virtual Box. Le plus simple est de cliquer avec le bouton droit de la souris sur le nom du fichier téléchargé puis de choisir Ouvrir avec/Instalateur de paquet GDebi.
  3. Si le lien symbolique python vers python2 existe, il faut l'éliminer :
    michel@hp:~$ ls -l /usr/bin/python lrwxrwxrwx 1 root root 16 mai 10 00:57 /usr/bin/python -> /usr/bin/python2 michel@hp:~$ sudo rm /usr/bin/python
  4. Créer le lien symbolique python vers python3 :
    michel@hp:~$ sudo ln -s /usr/bin/python3 /usr/bin/python
  5. Installer ToroiseHG selons les instructions dans le forum ask ubuntu, sauf qu'il ne faut pas installer le paquet python-is-python3 tel qu'indiqué à l'étape 5. Le lien symbolique crée à l'étape précédente suffit.
  6. Après toutes ces démarches, éliminer tout lien symbolique python dans /usr/bin
    michel@hp:~$ sudo rm /usr/bin/python

J'ai expliqué que je ne voulais pas de lien vers python2, mais selon les descriptions des paquets python-is-python2 et python-is-python3, le fichier /usr/bin/python ne doit plus être présent (Starting with the Debian 11 (bullseye) and Ubuntu 20.04 LTS (focal) releases, all python packages use explicit python3 or python2 interpreter and do not use unversioned /usr/bin/python at all) d'où cette dernière étape. En passant, ces descriptions se terminent par une autre phrase qui déclare que ces paquets ne devraient jamais être des prérequis d'autres paquets (No packages may declare dependencies on this package, or recommend that package.). Clairement, Virtual Box enfreint cette directive.

Enfin, voici un fichier /home/michel/.local/share/applications/toirtoisehg.desktop qui ajoute TortoiseHG au menu de Mate de Mint 20.1.

[Desktop Entry] Name=TortoiseHg Exec=/usr/bin/python3 /home/michel/thg/thg --nofork Comment=GUI application for using Mercurial Comment[fr]=Interface graphique pour Mercurial Terminal=false Type=Application Icon=/home/michel/thg/icons/svg/thg_logo.svg Categories=Utility;System; Keywords=VCS;SCM;Version control;

Comme on peut voir, la directive est suivie et la version de Python à utiliser est spécifié explicitement dans la ligne Exec=. Notez qu'il faudra ajuster le sentier vers le script TortoiseHG (c'est-à-dire thg) selon le répertoire dans lequel il a été construit. J'ai aussi créé un script bash pour lancer TortoiseHG depuis une ligne de commande dans un terminal.

#!/bin/bash if [[ "$#" -eq 0 ]]; then adir=$PWD elif [[ "$#" -eq 1 ]]; then adir=$1 else echo "syntaxe: thg [répertoire]" exit 2 fi /usr/bin/python3 /home/michel/thg/thg --nofork -R $adir

Comme précédemment, la version de l'interpréteur Python est spécifiée explicitement.

<-Numérisation avec l'imprimante multifonction Brother DCP-7040 dans Mint 20.1 ou Ubuntu 20.04 --