Quelle est la bonne façon de gérer plusieurs versions de python?
21
J'ai une machine avec Python 2.6 installé comme Python par défaut. Ensuite, j'ai installé Python 2.7 et créé manuellement / usr / bin / python comme lien symbolique vers la nouvelle installation.
Changer le Python par défaut (ou Perl, etc.) sur un OS est vraiment une mauvaise idée. Cet interpréteur fait en fait partie du système d'exploitation et il se peut bien que d'autres composants du système d'exploitation soient écrits spécifiquement pour fonctionner avec cette version de l'interpréteur.
Par exemple, sur Redhat, l'outil yum qui effectue les mises à jour du logiciel système est une application python. Vous ne voulez vraiment pas casser ça. Ces applications peuvent dépendre de modules python spécifiques, peut-être non standard, que la version que vous avez installée peut ne pas avoir. Par exemple, sur Ubuntu, je pense que certains des outils de système d'exploitation intégrés écrits en Python utilisent un ORM appelé Storm qui ne fait pas partie de la bibliothèque standard de Python. Est-ce que votre propre installation de Python 2.7 a la version attendue spécifique du module Storm installée? A-t-il une version de Storm? Non? Ensuite, vous venez de casser une partie de votre système d'exploitation.
La bonne façon de le faire est d'installer votre version préférée de python et de configurer votre compte d'utilisateur pour l'utiliser en configurant votre .bash_profile, chemin d'accès et autres. Vous pourriez également vouloir examiner le module virtualenv pour Python.
Googlé mon chemin ici. Serait -1 si j'avais le représentant sur cette pile. Pourquoi? Parce que l'approche suggérée dit seulement "installez votre version préférée de python". Comment cela se fait sans arroser le système python?
2015
@jez Les utilisateurs doivent se référer aux instructions d'installation pour leur combinaison d'application et de système d'exploitation de leur choix. En général, les packages d'installation de langue s'installent dans un emplacement bénin, ne remplacent pas les composants principaux du système d'exploitation, donc le remplacement de la version du système d'exploitation serait le cas spécial.
Simon Hibbs
8
Comment puis-je réparer ce désordre?
Rien de plus qu'une réinstallation python. Il annulera votre modification (le lien symbolique).
Pourquoi le voulez-vous par défaut? Chaque fois que vous en avez besoin, utilisez python2.7ou incluez #!/usr/bin/python2.7(le shebang) au début de vos scripts (exécutables).
Si vous insistez pour avoir python2.7comme valeur par défaut à l'échelle du système, utilisez une version ultérieure d'Ubuntu (actuellement c'est Ubuntu 11.04, nommé Natty). Il utilise cette version par défaut.
À l'avenir, évitez de faire des interventions manuelles comme ce que vous avez fait avec le lien symbolique. Cela est particulièrement vrai pour les fichiers gérés par distro, et plus particulièrement pour les bêtes complexes comme les installations Python.
Je pensais qu'il n'était raisonnable de changer l'installation par défaut de python qu'une fois la mise à niveau effectuée. Je le veux par défaut parce que je veux travailler avec le nouveau python ... par défaut. Lorsque je tape pythondepuis bash, je veux obtenir le nouveau python. Y a-t-il une meilleure façon de faire cela que ce que j'ai fait?
ripper234
Juste pour noter - je ne pense pas qu'il y ait quelque chose de mal dans la façon dont j'ai installé python 2.7. Le seul mouvement "peu orthodoxe" consistait à changer le lien symbolique, ce que je pensais être la bonne façon de le définir par défaut. Y a-t-il une meilleure façon?
ripper234
2
@ripper: Je suppose que j'arrive sur ce sujet un peu en retard. Comme le dit Tshepang, le pythonpackage sur Ubuntu détermine la version du système. Maintenant, il est possible de personnaliser votre installation afin que python 2.7 soit par défaut en créant votre propre package python, etc., mais si c'est le cas, vous deviendrez effectivement le responsable de votre installation Python au lieu d'Ubuntu, et vous devrez apprendre comment Python est géré sur Debian / Ubuntu. Gardez à l'esprit que les autres packages Python du système sont configurés pour fonctionner avec 2.6 par défaut, donc, en dehors de toute autre chose, une rupture peut en résulter.
Faheem Mitha
1
@Tshepang: Bon résumé!
Faheem Mitha
12
@ ripper234: Ne changez rien /usr/bin, c'est réservé à votre distribution. Faites plutôt /usr/local/bin/pythonun lien symbolique vers python2.7. Ensuite, les scripts utilisant #!/usr/bin/env python(l'idiome recommandé), ainsi que la saisie pythonsur la ligne de commande, exécuteront Python 2.7. Les scripts de la distribution qui veulent le Python de la distribution peuvent continuer à appeler #!/usr/bin/python.
Gilles 'SO- arrête d'être méchant'
2
Avertissement: je viens de poster cette même réponse pour déborder de pile:
Voici mon point de vue sur le problème. Fonctionne pour Python3. Les principales caractéristiques sont:
Chaque version Python est compilée à partir des sources
Toutes les versions sont installées localement
Ne modifie en aucune façon l'installation Python par défaut de votre système
Chaque version de Python est isolée avec virtualenv
Les étapes sont les suivantes:
Si plusieurs versions supplémentaires de Python sont installées d'une autre manière, supprimez-les, par exemple, supprimez $ HOME / .local / lib / python3.x , etc. (également celles installées globalement). Ne touchez pas cependant à la version par défaut de votre système python3.
Téléchargez la source pour différentes versions de python sous la structure de répertoires suivante:
$HOME/
python_versions/: download Python-*.tgz packages here and"tar xvf" them.You'll get directories like this:
Python-3.4.8/
Python-3.6.5/
Python-3.x.y/
...
Dans chaque répertoire "Python-3.xy /", procédez comme suit (n'utilisez PAS "sudo" dans aucune des étapes!):
mkdir root
./configure --prefix=$PWD/root
make -j 2
make install
virtualenv --no-site-packages -p root/bin/python3.x env
Dans "python_versions /", créez des fichiers comme celui-ci:
env_python3x.bash:#!/bin/bash
echo "type deactivate to exit"
source $HOME/python_versions/Python-3.x.y/env/bin/activate
Maintenant, chaque fois que vous souhaitez opter pour python3.x, faites
source $HOME/python_versions/env_python3x.bash
entrer dans le virtualenv
Dans virtualenv, installez vos packages python préférés avec
pip install --upgrade package_name
Pour quitter la version virtualenv et python, tapez simplement "désactiver"
Nous mettons beaucoup de distributions python sur Mac et Ubuntu et voici ma recommandation.
Laissez le système python sans souci: ne l'utilisez jamais.
Si vous n'avez besoin que d'une seule distribution Python principale, téléchargez et installez Canopy depuis Enthought. Quand il s'installe, choisissez "définir comme mon python système", puis vous pouvez installer des packages à partir du gestionnaire de packages GUI de Canopy.
Canopy est également compatible avec pipla commande PyPi package manager qui vous permet d'installer des packages (par exemple pip install python-twitter)
Si vous prévoyez d'utiliser des environnements virtuels (c.-à-d. Que vous développez des programmes python et que vous voulez un environnement python propre dédié pour chacun, avec un moyen facile de basculer entre eux), je recommanderais Anaconda sur Canopy en raison de son outil de gestionnaire d'environnement virtuel . Cela vous permettra
# Increase the chances that the build will have all dependencies.# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt build-dep python3
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
# Build and install a Python version from source.
pyenv install 3.8.0
Liste des versions Python disponibles:
pyenv versions
Nous avons maintenant:
* system (set by /home/cirsan01/.pyenv/version)3.8.0
Rien de plus qu'une réinstallation
python
. Il annulera votre modification (le lien symbolique).Pourquoi le voulez-vous par défaut? Chaque fois que vous en avez besoin, utilisez
python2.7
ou incluez#!/usr/bin/python2.7
(le shebang) au début de vos scripts (exécutables).Si vous insistez pour avoir
python2.7
comme valeur par défaut à l'échelle du système, utilisez une version ultérieure d'Ubuntu (actuellement c'est Ubuntu 11.04, nommé Natty). Il utilise cette version par défaut.À l'avenir, évitez de faire des interventions manuelles comme ce que vous avez fait avec le lien symbolique. Cela est particulièrement vrai pour les fichiers gérés par distro, et plus particulièrement pour les bêtes complexes comme les installations Python.
la source
python
depuis bash, je veux obtenir le nouveau python. Y a-t-il une meilleure façon de faire cela que ce que j'ai fait?python
package sur Ubuntu détermine la version du système. Maintenant, il est possible de personnaliser votre installation afin que python 2.7 soit par défaut en créant votre propre package python, etc., mais si c'est le cas, vous deviendrez effectivement le responsable de votre installation Python au lieu d'Ubuntu, et vous devrez apprendre comment Python est géré sur Debian / Ubuntu. Gardez à l'esprit que les autres packages Python du système sont configurés pour fonctionner avec 2.6 par défaut, donc, en dehors de toute autre chose, une rupture peut en résulter./usr/bin
, c'est réservé à votre distribution. Faites plutôt/usr/local/bin/python
un lien symbolique verspython2.7
. Ensuite, les scripts utilisant#!/usr/bin/env python
(l'idiome recommandé), ainsi que la saisiepython
sur la ligne de commande, exécuteront Python 2.7. Les scripts de la distribution qui veulent le Python de la distribution peuvent continuer à appeler#!/usr/bin/python
.Avertissement: je viens de poster cette même réponse pour déborder de pile:
/programming/2812520/pip-dealing-with-multiple-python-versions/50319252
Voici mon point de vue sur le problème. Fonctionne pour Python3. Les principales caractéristiques sont:
Les étapes sont les suivantes:
Si plusieurs versions supplémentaires de Python sont installées d'une autre manière, supprimez-les, par exemple, supprimez $ HOME / .local / lib / python3.x , etc. (également celles installées globalement). Ne touchez pas cependant à la version par défaut de votre système python3.
Téléchargez la source pour différentes versions de python sous la structure de répertoires suivante:
Dans chaque répertoire "Python-3.xy /", procédez comme suit (n'utilisez PAS "sudo" dans aucune des étapes!):
Dans "python_versions /", créez des fichiers comme celui-ci:
Maintenant, chaque fois que vous souhaitez opter pour python3.x, faites
entrer dans le virtualenv
Dans virtualenv, installez vos packages python préférés avec
Pour quitter la version virtualenv et python, tapez simplement "désactiver"
la source
Nous mettons beaucoup de distributions python sur Mac et Ubuntu et voici ma recommandation.
Laissez le système python sans souci: ne l'utilisez jamais.
Si vous n'avez besoin que d'une seule distribution Python principale, téléchargez et installez Canopy depuis Enthought. Quand il s'installe, choisissez "définir comme mon python système", puis vous pouvez installer des packages à partir du gestionnaire de packages GUI de Canopy.
pip
la commande PyPi package manager qui vous permet d'installer des packages (par exemplepip install python-twitter
)la source
pyenv
https://github.com/pyenv/pyenv
Pyenv vous permet de gérer plusieurs versions Python sans sudo pour un seul utilisateur, un peu comme Node.js NVM et Ruby RVM .
Installez Pyenv:
Ajoutez ensuite à votre
.bashrc
:Trouvez la version Python à installer:
Installez la version python que vous souhaitez:
Liste des versions Python disponibles:
Nous avons maintenant:
Sélectionnez une autre version de python:
Les deux sorties:
Nous pouvons maintenant procéder à l'installation et à l'utilisation des packages normalement:
Nous pouvons confirmer que tout est installé localement dans notre environnement propre avec:
Utilisation par projet
Dans la section précédente, nous avons vu comment utiliser pyenv dans une configuration globale.
Cependant, ce que vous voulez généralement est de définir une version spécifique de python et de package par projet. Voici comment faire.
Installez d'abord la version Python souhaitée comme précédemment.
Ensuite, depuis l'intérieur de votre répertoire de projet, définissez la version python souhaitée avec:
qui crée un fichier
.python-version
contenant la chaîne de version.Et maintenant, installons un package localement juste pour notre projet: TODO: il n'y a pas de façon sympa qu'il semble: /programming/30407446/pyenv-choose-virtualenv-directory/59267972#59267972
Maintenant, quand quelqu'un veut utiliser votre projet, il fera:
qui définit la version Python sur la bonne.
Sujets associés:
Testé sur Ubuntu 18.04, pyenv 1.2.15.
la source