Usando diferentes versiones de Python

21

Antecedentes :

Como desarrollo programas de Python que deben ejecutarse en diferentes versiones de Python, he instalado diferentes versiones de Python en mi computadora.

Estoy usando FC 13, así que vino con python 2.6 preinstalado en /usr/bin/python2.6y /usr/lib/python2.6.

Instalé python 2.5 desde la fuente, y para mantener las cosas ordenadas, utilicé la --prefix=/usropción, que instaló python en /usr/bin/python2.5y /usr/lib/python2.5.

Ahora, cuando ejecuto pythonmi solicitud, muestra que estoy usando la versión 2.5. Sin embargo, tengo algunos problemas con la instalación.

Gestión de paquetes :

Usando easy_install, los paquetes siempre se instalan en /usr/lib/python2.6/site-packages/. Descargué setuptools.egg para python 2.5 e intenté instalarlo, pero me da un error:

/usr/lib/python2.5/site-packages does NOT support .pth files

Parece que python2.5 no está en mi PYTHONPATH. Pensé que la instalación predeterminada se agregaría a PYTHONPATH, pero cuando escribo echo $PYTHONPATHen el indicador, recibo una línea vacía.

Alex
fuente

Respuestas:

20

La forma recomendada de tener instaladas varias versiones de Python es instalar cada una desde la fuente; felizmente coexistirán juntas. Luego puede usar virtualenv con el intérprete apropiado para instalar las dependencias requeridas (usando pip o easy_install). El truco para una instalación más fácil de múltiples intérpretes desde el origen es usar:

sudo make altinstall

en lugar del más habitual "sudo make install". Esto agregará el número de versión al ejecutable (por lo que tendría python-2.5, python-2.6, python-3.2, etc.) evitando así conflictos con la versión del sistema de Python.

VPeric
fuente
2
Altinstall + virtualenv = desarrollo de python nirvahna. ¡Gracias!
Alex
13

Esto suena como una aplicación perfecta para virtualenv , una herramienta muy popular para crear entornos Python aislados. Este es un comando de muestra para especificar la versión de Python

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv
Adam Byrtek
fuente
No creo que virtualenvsea ​​la solución en este caso. Mira mi respuesta.
Piotr Dobrogost
5

Usando easy_install, los paquetes siempre se instalan en /usr/lib/python2.6/site-packages/

Esto se debe a que distutils agrega la línea shebang a todos los scripts que se instalan. Si ejecuta el easy_installscript directamente, se ejecuta con el intérprete con el que se instaló (de acuerdo con la línea shebang). Lo que easy_installse está ejecutando depende de tu PATHno PYTHONPATH. Si desea instalar un paquete en la instancia de Python 2.5, debe ejecutar easy_installespecificando el intérprete de Python para usar:

/usr/bin/python2.5/python easy_install ...

Estrictamente hablando virtualenvno ayuda aquí, ya que debe crearse en el contexto de Python base, que es exactamente el mismo problema que con la ejecución easy_install. Para eso sirve el --pythonargumento virtualenv. Por alguna razón easy_installno proporciona un argumento análogo, por lo que debe ejecutarse con un intérprete de Python específico como se muestra arriba.

Piotr Dobrogost
fuente
Es mi primera respuesta aquí y espero la primera insignia de nigromante también :)
Piotr Dobrogost
Muy buena explicación, gracias! Insignia de nigromante bien ganada;)
Alex
2

También estoy usando Fedora 13 y PYTHONPATHno está configurado.

Dentro de Python, sys.pathle dará una lista de las rutas utilizadas para importar scripts.

No estoy familiarizado con cómo easy_installdecide su directorio de destino, pero estoy seguro de que podría haber un argumento de línea de comando que podría darle.

Intente especificar en qué versión de Python se ejecutará easy_installprecediendo su comando con la ruta completa a la Python que desea.

Compruebe también si easy_installhay un enlace simbólico en bin a un script dentro de una versión de Python que haya instalado.

Bkersten
fuente
1

Virtualenv es definitivamente un regalo del cielo aquí.

En mi configuración, tengo la variable de entorno VIRTUALENV_USE_DISTRIBUTEestablecida en 1, de modo que se usa el paquete Distribute más moderno en lugar de las herramientas de configuración. Creé entornos virtuales para las dos versiones de Python en mi sistema así:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

Luego creé tres alias en .bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

Por lo tanto, puedo usar py2para cambiar a un valor predeterminado de Python 2.6 y py3para cambiar a un valor predeterminado de Python 3.2. Al ingresar idlese ejecutará la versión de IDLE que sea apropiada para el entorno virtual en el que estoy.

La instalación de paquetes en uno de estos entornos virtuales generalmente solo implica un pip installcomando.

pitonero
fuente