Deux versions de python sur linux. comment faire de 2.7 la valeur par défaut

124

J'ai deux versions de python sur ma linuxbox:

$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct  8 2013, 15:53:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python

Comment puis-je faire de 2.7 la version par défaut, alors quand je tape, pythoncela me place dans 2.7?

Anthony
la source
1
Quand j'ai fait ça à mon fedora, yum ou apt-get ne fonctionnait plus.
Utilisateur
@User: Ouais, j'ai cassé une ancienne Mandrake de la même manière (changer /usr/bin/env pythonpour signifier 2.6 au lieu de 2.3 signifiait la moitié des commandes rpmet tout a urpmicessé de fonctionner).
abarnert
J'ai suivi l'étape suivante pour installer Django sur Centos 5: Tout d'abord, installez Python 3.6 à partir du code source. 2ème: dans le shell tapez la commande suivante "alias python = / usr / local / bin / python3.6" 3ème: exécutez la commande suivante pour installer Django "pip3 install Django" 4ème: "python -m django --version" pour vérifier le Django installé avec la version "1.10.5"
showmyroutes
pour moi /usr/bin/pythonétait un lien souple pointant vers python2. Je viens de le changer enpython3.6
munish

Réponses:

173

Vous ne voulez probablement pas changer votre Python par défaut.

Votre distribution a installé un système Python standard dans /usr/bin, et peut avoir des scripts qui dépendent de sa présence et sont sélectionnés par #! /usr/bin/env python. Vous pouvez généralement vous en sortir avec l'exécution de scripts Python 2.6 dans 2.7, mais voulez-vous le risquer?

En plus de cela, le singe avec /usr/binpeut casser la capacité de votre gestionnaire de packages à gérer les packages. Et changer l'ordre des répertoires dans votre PATHaffectera beaucoup d'autres choses en plus de Python. (En fait, il est plus courant d'avoir une /usr/local/binlongueur d'avance /usr/bin, et c'est peut-être ce que vous voulez réellement - mais si vous l'avez dans l'autre sens, il y a probablement une bonne raison à cela.)

Mais vous n'avez pas besoin de changer votre Python par défaut pour que le système s'exécute 2.7 lorsque vous tapez python.


Tout d'abord, vous pouvez configurer un alias shell:

alias python=/usr/local/bin/python2.7

Tapez-le à une invite ou placez-le dans votre ~/.bashrcsi vous voulez que la modification soit persistante, et maintenant, lorsque vous tapez, pythonelle exécute le 2.7 choisi, mais lorsqu'un programme sur votre système essaie d'exécuter un script avec, /usr/bin/env pythonil exécute le standard 2.6.


Vous pouvez également créer simplement un environnement virtuel à partir de votre 2.7 (ou des venv séparés pour différents projets) et faire votre travail à l'intérieur du venv.

Abarnert
la source
1
:( vous avez raison. Malheureusement, j'avais déjà créé un nouveau lien symb selon la réponse de @ rohit. Maintenant, ma yumcommande ne fonctionne pas! J'ai essayé de créer le lien sym mais cela ne fonctionne sudo ln -sf /usr/bin/python2.6 /usr/bin/pythonpas?
Anthony
@Anthony: Je suppose que ce /usr/bin/pythonn'était pas en fait un lien symbolique avant, c'était un script wrapper ou un exécutable, et maintenant vous l'avez écrasé et vous ne pouvez pas le récupérer. Si cela rpmfonctionne toujours, vous pouvez télécharger manuellement le package Python et l'installer sans yum.
abarnert
Je peux toujours accéder à l'interpréteur 2.6 lorsque je tape python2.6donc il est toujours là.
Anthony
7
@Anthony: Et à l'avenir, si quelqu'un vous dit de changer des choses dans / usr / bin (ou n'importe où dans / usr à part / usr / local), notez ce qui est là, et une sauvegarde…
abarnert
dans quel désordre je me suis mis !! J'ai une autre boîte de centos qui pourrait avoir ce script. Si je le copie à partir de là et le mets dans / usr / bin de cette boîte. pensez-vous que cela fonctionnera?
Anthony
19

Ajoutez /usr/local/binà votre PATHvariable d'environnement, plus tôt dans la liste que /usr/bin.

Généralement, cela se fait dans le fichier rc de votre shell, par exemple pour bash, vous devez le mettre dans .bashrc:

export PATH="/usr/local/bin:$PATH"

Cela amènera votre shell à rechercher d'abord un pythonin /usr/local/bin, avant qu'il n'aille avec celui in /usr/bin.

(Bien sûr, cela signifie que vous devez également /usr/local/bin/pythonpointer vers python2.7- si ce n'est pas déjà le cas, vous devrez le créer un lien symbolique.)

ambre
la source
Il peut être nécessaire de configurer PYTHONHOME de manière appropriée / de le désactiver s'il est défini par quelque chose.
Marcin
1
Ce n'est pas aussi dangereux que les solutions qui suggèrent de changer / usr / bin lui-même… mais je pense toujours que ce n'est pas ce que l'OP veut réellement.
abarnert
Cela m'a aidé après la mise à niveau d'Ubuntu 14.x vers 16.x
learn2day
4

Entrez la commande

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

Ici vous pouvez voir quelque chose comme ça

lrwxrwxrwx 1 root   root            9 Mar  7 17:04  python -> python2.7

votre python2.7 par défaut est lié au texte 'python'

Alors supprimez le python softlink

sudo rm -r python

puis réessayez la commande ci-dessus

ls -l

vous pouvez voir que le lien logiciel est supprimé

-rwxr-xr-x 1 root   root      3670448 Nov 12 20:01  python2.7

Ensuite, créez un nouveau softlink pour python3.6

ln -s /usr/bin/python3.6 python

Ensuite, essayez la commande pythondans le terminal

//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux

Tapez help, copyright, creditsou licensepour plus d' informations.

Sreenath
la source
1
Votre message n'est pas une réponse à la question d'OP.
Frank
Cela a résolu un problème très étrange pour moi. Lorsque je vérifie la version python à partir de la racine ou du terminal normal, il affiche 3.6.8, mais si je crée un .sh et tapez python -version à l'intérieur, cela imprimait 2.7. Il s'avère que c'était parce qu'un lien souple existait comme mentionné ci-dessus. Suivez les étapes et c'est corrigé. Merci.
S4nd33p
Je vous remercie! Cela m'a résolu le problème de "python requis 3 ou plus tard"
Tamim Attafi
4

Vérifiez la version actuelle de python en:

$ python --version

puis vérifiez que python est un lien symbolique vers quel fichier.

  $ ll /usr/bin/python

Sortie Ex:

 lrwxrwxrwx 1 root root 9 Jun 16  2014 /usr/bin/python -> python2.7*

Vérifiez les autres versions disponibles de python:

$ ls /usr/bin/python*

Sortie Ex:

/usr/bin/python     /usr/bin/python2.7-config  /usr/bin/python3.4         /usr/bin/python3.4m-config  /usr/bin/python3.6m         /usr/bin/python3m
/usr/bin/python2    /usr/bin/python2-config    /usr/bin/python3.4-config  /usr/bin/python3.6          /usr/bin/python3.6m-config  /usr/bin/python3m-config
/usr/bin/python2.7  /usr/bin/python3           /usr/bin/python3.4m        /usr/bin/python3.6-config   /usr/bin/python3-config     /usr/bin/python-config

Si vous voulez changer la version actuelle de python en version 3.6, éditez le fichier ~ / .bashrc:

vim ~/.bashrc

ajoutez ci-dessous la ligne à la fin du fichier et enregistrez:

alias python=/usr/local/bin/python3.6

Pour installer pip pour python 3.6

$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip

En cas de succès, vérifiez la version actuelle de pip:

$ pip3 -V

Sortie Ex:

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)
Shiv Buyya
la source
2

Tous les systèmes d'exploitation sont livrés avec une version par défaut de python et il réside dans / usr / bin. Tous les scripts fournis avec le système d'exploitation (par exemple yum) indiquent cette version de python résidant dans / usr / bin. Lorsque vous souhaitez installer une nouvelle version de python, vous ne voulez pas casser les scripts existants qui peuvent ne pas fonctionner avec la nouvelle version de python.

La bonne façon de faire est d'installer le python comme une version alternative.

e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall

Maintenant, en faisant cela, les scripts existants comme yum fonctionnent toujours avec / usr / bin / python. et votre version python par défaut serait celle installée dans / usr / local / bin. c'est-à-dire que lorsque vous tapez python, vous obtiendrez 2.7.3

Cela se produit parce que. La variable $ PATH a / usr / local / bin avant usr / bin.

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

Si python2.7 ne prend toujours pas effet en tant que version par défaut de python, vous devrez le faire

export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
Prakash Kamath
la source
-8

Je suppose que vous avez installé la version 2.7 manuellement, tandis que la 2.6 provient d'un package?

La réponse simple est: désinstaller le package python.

La plus complexe est la suivante: ne pas installer manuellement dans / usr / local. Créez un package avec la version 2.7, puis mettez à niveau.

La gestion des packages dépend de la distribution que vous utilisez.

emesik
la source
5
Le package Python est presque certainement requis par la distribution. CentOS est basé sur RPM et la moitié des outils RPM et YUM sont écrits en Python.
abarnert
Cher Michael, Veuillez conseiller l'option de désinstaller manuellement python2.7!
AVA
La solution simple serait de supprimer tout ce qui se trouve sous / usr / local / mais de cette façon vous supprimez tout ce que vous avez compilé et installé manuellement. Il n'y a pas de bon moyen de déterminer quels fichiers appartiennent à quel logiciel dans / usr / local et pour cette raison, l'installation de tout ce qui s'y trouve est généralement déconseillée. Peut-être que vous n'avez que python là-bas. Si / usr / local / bin ne contient que des exécutables python, vous avez de bonnes chances que la suppression ne cassera rien d'autre.
emesik
2
Vous ne devez jamais désinstaller python. Prends ça de moi. Je l'ai fait et cela a brisé mon système. De nombreuses applications en dépendent. C'est très mal avisé.
Patrick Mutwiri