Plusieurs versions de Python sur la même machine?

87

Existe-t-il une documentation officielle sur le site Web de Python quelque part, sur la façon d'installer et d'exécuter plusieurs versions de Python sur la même machine sous Linux?

Je peux trouver des millions d'articles de blog et de réponses, mais je veux savoir s'il existe une manière officielle «standard» de le faire?

Ou est-ce que tout dépend du système d'exploitation?

Andriy Drozdyuk
la source

Réponses:

79

Je pense que c'est totalement indépendant. Installez-les simplement, puis vous avez les commandes par exemple /usr/bin/python2.5et /usr/bin/python2.6. Lien /usr/bin/pythonvers celui que vous souhaitez utiliser par défaut.

Toutes les bibliothèques sont de toute façon dans des dossiers séparés (nommés d'après la version).

Si vous souhaitez compiler les versions manuellement, cela provient du fichier readme du code source Python:

Installer plusieurs versions

Sur les systèmes Unix et Mac, si vous avez l'intention d'installer plusieurs versions de Python en utilisant le même préfixe d'installation (argument --prefix du script configure), vous devez veiller à ce que votre exécutable Python principal ne soit pas écrasé par l'installation d'une version différente. Tous les fichiers et répertoires installés à l'aide de "make altinstall" contiennent la version majeure et la version mineure et peuvent donc vivre côte à côte. "make install" crée également $ {prefix} / bin / python3 qui fait référence à $ {prefix} /bin/pythonX.Y. Si vous avez l'intention d'installer plusieurs versions en utilisant le même préfixe, vous devez décider quelle version (le cas échéant) est votre version "principale". Installez cette version en utilisant "make install". Installez toutes les autres versions en utilisant "make altinstall".

Par exemple, si vous voulez installer Python 2.5, 2.6 et 3.0 avec 2.6 étant la version principale, vous exécuteriez "make install" dans votre répertoire de build 2.6 et "make altinstall" dans les autres.

Félix Kling
la source
5
Merci, "make install" sur le primaire et "make altinstall" sur le secondaire l'ont clairement montré.
Andriy Drozdyuk
4
Un moyen correct de partager des bibliothèques entre les versions? Disons que j'ai MySQLdb pour 2.6, puis installé 2.7. comment rendre MySQLdb disponible pour 2.7 également?
romeroqj
Toutes les informations que vous donnez sont pour Unix / Linux et Mac OS, donc clairement pas "totalement indépendant" de l'OS, comme le demande l'OP. Pour Windows, le processus est assez différent mais tout aussi simple.
wwwayne
28

Sous Windows, ils sont installés dans des dossiers séparés, "C: \ python26" et "C: \ python31", mais les exécutables ont le même nom "python.exe".

J'ai créé un autre dossier "C: \ python" contenant "python.bat" et "python3.bat" qui servent de wrappers à "python26" et "python31" respectivement, et j'ai ajouté "C: \ python" à la PATHvariable d'environnement.

Cela me permet de taper pythonou python3dans mes wrappers Python .bat pour démarrer celui que je désire.

Sous Linux, vous pouvez utiliser l' #!astuce pour spécifier la version que vous souhaitez qu'un script utilise.

l'homme d'étain
la source
Que ajouter dans ces fichiers .bat?
Aidis
Ne pas voter pour cette réponse uniquement parce qu'elle est très spécifique à Windows et que la question était liée à Linux, sinon de bonnes informations.
Jim Aho
2
L'utilisateur n'existe plus, je voulais vraiment ce fichier batch
Wargog
6
C'est ce que j'ai mis dans mon fichier python.bat (juste une ligne): "c: \ python27 \ python% *" Ensuite, je l'invoque simplement normalement, c'est-à-dire 'python test.py' et le% * récupérera tous les arguments et passez-le à l'exécutable réel. Vous pouvez également utiliser mklink directement dans votre dossier C: \ bin. Voir ici pour les détails: stackoverflow.com/a/13953614/865929
Sean Glover
1
Maintenant, vous pouvez simplement exécuter py -3.4ou py -2.7et le programme py(ci-dessous C:\Windows) choisira cet interpréteur python (en supposant qu'il soit installé).
JamesThomasMoon1979
12

Mise à jour 2019: utilisation asdf

Ces jours-ci, je suggère d'utiliser asdf pour installer différentes versions d'interpréteurs Python les unes à côté des autres.

Note1: asdffonctionne non seulement pour Python mais pour tous les principaux langages.

Note 2: asdffonctionne très bien en combinaison avec des gestionnaires de paquets populaires tels que pipenv et poetry .

Si asdf est installé, vous pouvez facilement télécharger / installer de nouveaux interpréteurs Python:

# Install Python plugin for asdf:
asdf plugin-add python

# List all available Python interpreters:
asdf list-all python

# Install the Python interpreters that you need:
asdf install python 3.7.4
asdf install python 3.6.9
# etc...

# If you want to define the global version:
asdf global python 3.7.4

# If you want to define the local (project) version:
# (this creates a file .tool-versions in the current directory.)
asdf local python 3.7.4

Ancienne réponse: installer Python à partir des sources

Si vous devez installer plusieurs versions de Python (à côté de la version principale) sur Ubuntu / Mint : (devrait fonctionner de la même manière sur les autres Unix.)

1) Installer les packages requis pour la compilation des sources

$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

2) Téléchargez et extrayez la version Python souhaitée

Téléchargez Python Source pour Linux en tant que tarball et déplacez-le vers /usr/src.

Extrayez le package téléchargé sur place. (remplacez les 'x par votre version téléchargée)

$ sudo tar xzf Python-x.x.x.tgz

3) Compilez et installez la source Python

$ cd Python-x.x.x
$ sudo ./configure
$ sudo make altinstall

Votre nouveau bin Python se trouve maintenant dans /usr/local/bin. Vous pouvez tester la nouvelle version:

$ pythonX.X -V
Python x.x.x
$ which pythonX.X
/usr/local/bin/pythonX.X

# Pip is now available for this version as well:
$ pipX.X -V
pip X.X.X from /usr/local/lib/pythonX.X/site-packages (python X.X)
Rotareti
la source
6

La façon d'installer différentes versions de Python dépend en effet du système d'exploitation.

Cependant, si vous êtes sous Linux, vous pouvez utiliser un outil tel que pythonbrew ou pythonz pour vous aider à gérer et basculer facilement entre les différentes versions.

Rodrigue
la source
J'ai installé sur un mac avec configure / make altinstall. Aucun problème pour l'instant.
Evgeny
Est-il possible de donner $user1une autre version de python que celle par défaut?
Roland
1
@Roland pyenvtravaillera pour cela. À partir du fichier Lisez-moi dans le lien publié ci-dessus:> [Permet] de modifier la version globale de Python par utilisateur.
theeddieh
5

J'utilise Mac et la meilleure façon qui a fonctionné pour moi est d'utiliser pyenv!

Les commandes ci-dessous sont pour Mac mais assez similaires à Linux (voir les liens ci-dessous)

#Install pyenv
brew update
brew install pyenv

Disons que vous avez python 3.6 comme version principale sur votre mac:

python --version 

Production:

Python <your current version>

Maintenant, installez python 3.7, tout d'abord la liste

pyenv install -l

Prenons 3.7.3:

pyenv install 3.7.3

Assurez-vous de l'exécuter dans le terminal (ajoutez-le à ~ / .bashrc ou ~ / .zshrc):

export PATH="/Users/username/.pyenv:$PATH"
eval "$(pyenv init -)"

Maintenant, exécutons-le uniquement sur le terminal / shell ouvert :

pyenv shell 3.7.3

Maintenant courez

python --version

Production:

Python 3.7.3

Et pas moins important de le désactiver dans le shell ouvert / iTerm:

pyenv shell --unset

Vous pouvez l' exécuter globalement ou localement aussi bien

Kohn1001
la source
1

Gestionnaires de packages - niveau utilisateur

Pour un gestionnaire de packages capable d'installer et de gérer plusieurs versions de python, voici de bons choix:

  • pyenv - ne peut installer et gérer que les versions de python
  • asdf - capable d'installer et de gérer de nombreuses langues différentes

L'avantage de ces gestionnaires de paquets est qu'il peut être plus facile de les configurer et d'installer plusieurs versions de python avec eux que d'installer python à partir des sources. Ils fournissent également des commandes pour modifier facilement la ou les versions de python disponibles à l'aide de shims et définir la version de python par répertoire.

Cet inconvénient est que, par défaut, ils sont installés au niveau de l'utilisateur (dans votre répertoire personnel) et nécessitent un peu de configuration au niveau de l'utilisateur - vous devrez modifier vos fichiers ~/.profileet / ~/.bashrcou similaires. Cela signifie qu'il n'est pas facile de les utiliser pour installer plusieurs versions de python globalement pour tous les utilisateurs. Pour ce faire, vous pouvez installer à partir de la source avec la version python existante du système d'exploitation.


Installation à partir de la source - à l'échelle du système

Vous aurez besoin des privilèges root pour cette méthode.

Consultez la documentation officielle de python pour la construction à partir des sources pour des considérations et des options supplémentaires.

/usr/localest l'emplacement désigné par un administrateur système pour installer un logiciel partagé (à l'échelle du système), donc ses sous-répertoires sont un bon endroit pour télécharger la source python et l'installer. Voir la section 4.9 du standard de hiérarchie des fichiers de la Linux Foundation .

Installez toutes les dépendances de construction. Sur les systèmes basés sur Debian, utilisez:

apt update
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev

Choisissez la version de Python que vous souhaitez installer. Consultez la page Python Source Releases pour une liste.

Téléchargez et décompressez le fichier en /usr/local/srcremplaçant X.X.Xci-dessous par la version python (ie 3.8.2).

cd /usr/local/src
wget https://www.python.org/ftp/python/X.X.X/Python-X.X.X.tgz
tar vzxf Python-X.X.X.tgz

Avant de construire et d'installer, définissez la CFLAGSvariable d'environnement avec les indicateurs de compilateur C nécessaires (voir la makedocumentation de GNU ). Ce n'est généralement pas nécessaire pour une utilisation générale, mais si, par exemple, vous vouliez créer un plugin uWSGI avec cette version python, vous voudrez peut-être définir les indicateurs,, -fPICavec les éléments suivants:

export CFLAGS='-fPIC'

Remplacez le répertoire de travail par le répertoire source python décompressé et configurez la construction. Vous voudrez probablement utiliser l' --enable-optimizationsoption de la ./configurecommande pour l' optimisation guidée par profil . Utilisez --prefix=/usr/localpour installer les sous - répertoires appropriés ( /usr/local/bin, /usr/local/lib, etc.).

cd Python-X.X.X
./configure --enable-optimizations --prefix=/usr/local

Générez le projet avec makeet installez avec make altinstallpour éviter de remplacer des fichiers lors de l'installation de plusieurs versions. Voir l'avertissement sur cette page de la documentation de compilation python.

make -j 4
make altinstall

Ensuite, vous devriez être en mesure d'exécuter vos nouvelles versions de python et pip avec pythonX.Xet pipX.X(c'est python3.8-à- dire et pip3.8). Notez que si la version mineure de votre nouvelle installation est la même que la version du système d'exploitation (par exemple, si vous installez python3.8.4 et que le système d'exploitation utilise python3.8.2), vous devrez alors spécifier le chemin complet ( /usr/local/bin/pythonX.X) ou définir un alias pour utiliser cette version.

Chat bleu
la source
0

Cela dépend le plus fortement du système de distribution de packages que vous utilisez. Par exemple, avec MacPorts, vous pouvez installer plusieurs packages Python et utiliser l' pyselectutilitaire pour basculer facilement la valeur par défaut entre eux. À tout moment, vous pouvez appeler les différents interpréteurs Python en fournissant le chemin complet, et vous pouvez établir un lien avec toutes les bibliothèques et en-têtes Python en fournissant les chemins complets pour ceux-ci.

Donc, fondamentalement, quelle que soit la manière dont vous installez les versions, tant que vous gardez vos installations séparées, vous pourrez les exécuter séparément.

Seth Johnson
la source
Qu'est-ce qu'un système de distribution de paquets?
Andriy Drozdyuk
@drozzy: Par exemple, RPM utilisé par OpenSuse ou apt utilisé par les distributions basées sur Debian ou le portage utilisé par Gentoo etc. Fondamentalement, c'est un outil pour installer des logiciels.
Felix Kling
0

Je l'ai fait avec le navigateur anaconda. J'ai installé le navigateur anaconda et créé deux environnements de développement différents avec différentes versions de python

et basculer entre les différentes versions de Python en commutant ou en activant et en désactivant des environnements.

installez d'abord anaconda navigateur, puis créez des environnements.

voir l'aide ici sur la gestion des environnements

https://docs.anaconda.com/anaconda/navigator/tutorials/manage-environments/

Voici la vidéo pour le faire avec conda

https://youtu.be/EGaw6VXV3GI

mohitesachin217
la source