Comment modifier la version par défaut de Python sur Debian

Une installation de Debian peut inclure plusieurs version de python et donc embarquer plusieurs binaires python. Vous pouvez exécuter la commande ls dans le dossier /usr/bin de votre distribution afin de lister les versions de python installées :

$ ls /usr/bin/python*
/usr/bin/python  /usr/bin/python2  /usr/bin/python2.7  /usr/bin/python3  /usr/bin/python3.4  /usr/bin/python3.4m  /usr/bin/python3m

Afin de connaître la version exécutée par défaut, entrez la commande suivante :

$ python --version
Python 2.7.9

Changer la version de python par utilisateur

Pour modifier la version de python par utilisateur, créez simplement un alias dans le répertoire personnel de l’utilisateur. Ouvrez le fichier ~/.bashrc et ajoutez un nouvel alias pour modifier votre exécutable python par défaut:

alias ​​python='/usr/bin/python3.4'

Une fois que vous avez fait le changement ci-dessus, recharger votre fichier .bashrc :

$ . ~/.bashrc

Et vérifiez votre version de python par défaut:

$ python --version
Python 3.4.2

Modifier la version de python à l’échelle du système

Pour changer la version de python à l’échelle du système, nous allons utiliser la commande update-alternatives en tant qu’utilisateur root.
Pour visualiser toutes les alternatives disponibles de python :

# update-alternatives --list python
update-alternatives: error: no alternatives for python

Le message d’erreur ci-dessus indique qu’aucune alternative de python n’a été reconnue par update-alternatives. Pour cette raison, nous devons mettre à jour notre tableau des alternatives et inclure à la fois python2.7 et python3.4 :

# update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode
# update-alternatives --install /usr/bin/python python /usr/bin/python3.4 2
update-alternatives: using /usr/bin/python3.4 to provide /usr/bin/python (python) in auto mode

L’option --install prend plusieurs arguments à partir desquels il sera capable de créer un lien symbolique. Le dernier argument spécifié défini la priorité, si aucune sélection manuelle alternative n’est donnée, l’option avec le numéro de priorité le plus élevé sera exécutée. Dans notre cas, nous avons défini une priorité 2 pour /usr/bin/python3.4 et de ce fait /usr/bin/python3.4 a été définie comme la version python par défaut par update-alternatives.

# python --version
Python 3.4.1

Ensuite, nous pouvons à nouveau énumérer toutes les alternatives de python :

# Update-alternatives --list python
/usr/bin/python2.7
/usr/bin/python3.4

A partir de maintenant, nous pouvons à tout moment basculer entre les versions alternatives de python listées ci-dessus en utilisant la commande ci-dessous et en entrant un numéro de sélection:

# update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.4   2         auto mode
  1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.4   2         manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in manual mode
# python --version
Python 2.7.9

Annexe

Dans le cas où nous n’avons plus la version alternative de python installée sur notre système, nous pouvons la retirer de la liste des update-alternatives. Par exemple, supprimons la version de python2.7 :

# update-alternatives --remove python /usr/bin/python2.7
update-alternatives: removing manually selected alternative - switching python to auto mode
update-alternatives: using /usr/bin/python3.4 to provide /usr/bin/python (python) in auto mode

J’ai remarqué sur Ubuntu 16.10 un problème de mise à jour du package meld lorsque l’alternative de python est la 3.x. Dans ce cas utlisé la méthode de l’alias pour votre utilisateur. Où faite un alias de python vers python2.x pour root.