Dos versiones de python en linux. cómo hacer que el 2.7 por defecto

Tengo dos versiones de python en mi 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 

¿Cómo puedo hacer que 2.7 sea la versión predeterminada para que cuando escriba python me ponga en 2.7?

Probablemente no quieras cambiar tu Python predeterminado.

Su distro instaló un sistema estándar de Python en /usr/bin , y puede tener scripts que dependen de que este esté presente y seleccionado por #! /usr/bin/env python #! /usr/bin/env python . Por lo general, puede ejecutar los scripts de Python 2.6 en 2.7, pero ¿quiere arriesgarse?

Además de eso, el uso de /usr/bin puede afectar la capacidad del administrador de paquetes para administrar paquetes. Y cambiar el orden de los directorios en su PATH afectará muchas otras cosas además de Python. (De hecho, es más común tener /usr/local/bin por delante de /usr/bin , y puede ser lo que realmente quieres, pero si lo tienes al revés, probablemente hay una buena razón para ello).

Pero no necesita cambiar su Python predeterminado para que el sistema se ejecute 2.7 cuando escribe python .


Primero, puedes configurar un alias de shell:

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

Escriba eso cuando lo solicite, o póngalo en su ~/.bashrc si desea que el cambio sea persistente, y ahora cuando escribe python ejecuta el 2.7 elegido, pero cuando algún progtwig de su sistema intenta ejecutar un script con /usr/bin/env python ejecuta el estándar 2.6.


Alternativamente, solo cree un entorno virtual a partir de su 2.7 (o venvs separados para diferentes proyectos), y haga su trabajo dentro de venv.

Agregue /usr/local/bin a su PATH entorno PATH , antes en la lista que /usr/bin .

Generalmente esto se hace en el archivo rc de tu shell, por ejemplo, para bash, pondrías esto en .bashrc :

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

Esto hará que su shell busque primero un python en /usr/local/bin , antes de que vaya con el de /usr/bin .

(Por supuesto, esto significa que también debe tener /usr/local/bin/python point to python2.7 ; si no lo tiene, deberá python2.7 ).

Todo el sistema operativo viene con una versión predeterminada de python y reside en / usr / bin. Todos los scripts que vienen con el sistema operativo (por ejemplo, yum) apuntan a esta versión de python que reside en / usr / bin. Cuando desea instalar una nueva versión de python, no desea romper los scripts existentes que pueden no funcionar con la nueva versión de python.

La forma correcta de hacer esto es instalar el python como una versión alternativa.

 eg 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 

Ahora, al hacer esto, los scripts existentes como yum aún funcionan con / usr / bin / python. y su versión predeterminada de Python sería la instalada en / usr / local / bin. es decir, cuando escribes python obtendrías 2.7.3

Esto sucede porque. La variable $ PATH tiene / usr / local / bin antes de 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 aún no tiene efecto como la versión predeterminada de python que necesitarías hacer

 export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin" 

Verifica la versión actual de python por:

 $ python --version 

A continuación, compruebe que Python es un enlace simbólico a qué archivo.

  $ ll /usr/bin/python 

Salida Ex:

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

Compruebe otras versiones disponibles de python:

 $ ls /usr/bin/python* 

Salida 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 desea cambiar la versión actual de python a la versión 3.6, edite el archivo ~ / .bashrc:

 vim ~/.bashrc 

Agregue la siguiente línea al final del archivo y guarde:

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

Para instalar pip para 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 caso de éxito, compruebe la versión actual de pip:

 $ pip3 -V 

Salida Ex:

 pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6) 

Ingrese el comando

 which python //output: /usr/bin/python cd /usr/bin ls -l 

Aquí puedes ver algo como esto.

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

tu python2.7 predeterminado está vinculado al texto ‘python’

Así que retire el enlace suave de python

 sudo rm -r python 

luego vuelva a intentar el comando anterior

 ls -l 

Puedes ver que el enlace blando es eliminado

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

Luego crea un nuevo enlace de software para python3.6

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

Entonces prueba el comando python en la terminal

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

Escriba help , copyright , credits o license para obtener más información.

¿Supongo que ha instalado la versión 2.7 manualmente, mientras que 2.6 proviene de un paquete?

La respuesta simple es: desinstalar el paquete python.

El más complejo es: no instale manualmente en / usr / local. Construye un paquete con la versión 2.7 y luego actualiza.

El manejo del paquete depende de la distribución que utilice.