“Forma correcta” para administrar varias versiones de Python en archlinux

Así que he leído esto – https://wiki.archlinux.org/index.php/Python

Y está claro en esta wiki que puedo instalar Python 2.7.2 a través de

pacman -S python2 

¿Es razonable para mí crear un enlace simbólico a python2?

 ln -s python2 /usr/bin/python 

¿Si no me veo a mí mismo cambiando a python 3.0 pronto? ¿O hay una mejor manera de administrar varias versiones de Python, como lo que normalmente uso en un sistema Debian (update-alternative –config python) o en un sistema mac os x (python select)?

ACLARACIÓN:

  • Lo que estoy tratando de descubrir es: ¿cuál es la “mejor práctica” de administrar varias versiones de python en un sistema archlinux?
  • Soy nuevo en archlinux pero estoy familiarizado con Ubuntu, Debian y Mac OS X

La mayoría de los usuarios ya tienen un / usr / bin / python. Sobrescribir que es una mala idea, ya que esta es la versión de Python utilizada por todos los paquetes en el sistema, y ​​cambiarla puede romperlos. Al instalar el paquete de Python 2.7, el ejecutable debe instalarse como /usr/bin/python2.7 (de lo contrario, diría que Archlinux está dañado) y es mejor usarlo cuando desee ejecutar Python 2.7.

Archlinux es un poco especial, ya que usará / usr / bin / python para Python 3, a pesar de que el nombre ejecutable predeterminado de Python 3 es / usr / bin / python3. Esto es confuso y se puede ver como un error, pero significa que no puede usar ese enlace simbólico para Python 2, ya que cualquier otro script de Archlinux que use Python 3 se romperá si lo hace.

Entonces, donde en otros Unices, simbolizar / usr / bin / python con Python 2.7 es una mala idea, en Archlinux es una idea terrible. En su lugar, simplemente instale todas las versiones que necesite y llámelas con /usr/bin/pythonX.X.

Yo diría que no deberías crear ningún enlace simbólico como este en absoluto. Especialmente si va a distribuir parte de su código de Python, no debe asumir que un usuario tiene python2 o python3 en / usr / bin / python.

Si su script requiere python2, solo use:

 #!/usr/bin/env python2 

Si su script requiere python3, use:

 #!/usr/bin/env python3 

De esta manera, sus scripts funcionarán bien incluso a través de las actualizaciones de Python. También será mucho más claro qué versión necesita realmente su script.

Hay un buen proyecto en github que te ayuda con lo que se llama pyenv Lo que te ayuda a administrar varias instancias de python

Como han dicho otros, la respuesta corta es “no hagas esto, es muy probable que rompas cosas en tu sistema”, sin embargo, si utilizas principalmente Python 2, aún puedes establecer tu configuración personal predeterminada en tu shell (y aún tener la opción de cambiar a Python 3 en cualquier momento). Para hacer esto, primero conviértase en root e instale python2-virtualenv :

 # pacman -S python2-virtualenv 

Luego cree un entorno virtual que use Python 2 (esto instalará automáticamente Python, setuptools, wheel y pip en el entorno):

 $ virtualenv -p /usr/bin/python2 --system-site-packages ~/env # (Or wherever you want your environment to live) 

Si solo desea usar paquetes instalados localmente (por ejemplo, los paquetes que instala con pip y no los instalados por pacman ), elimine la --system-site-packages al crear su entorno.

Ahora en su ~/.bash_profile o ~/.profile (o cualquiera que sea el archivo de configuración de sus shells preferidos), configure algo como lo siguiente:

 source ~/env/bin/activate 

Esto activará el entorno virtual, haciendo su versión predeterminada de Python 2.

Esto aún podría romper cualquier cosa que se inicie en un shell, pero no es probable que se produzca algo a menos que lo esté ejecutando explícitamente desde un shell, en cuyo punto puede desactivar el entorno virtual ejecutando:

 deactivate 

o simplemente ejecute manualmente Python 3.

No, no hay mejor manera de hacer esto. El enlace simbólico de python es parte del paquete Python 3.

Supongo que cambiar este enlace no romperá nada por ahora, pero es posible que algunos paquetes dependan de ello en el futuro.

Me tropecé con este post, no tenía la intención de hacer necroscopios, pero me estaba preguntando que nadie mencionó virtualenvs. También estoy usando ArchLinux y uso los paquetes python virtualenv y virtualenvwrapper para crear múltiples entornos python. Puede hacer referencia a los binarios de python 2 o python3 en / usr / bin / para determinar la versión de python utilizada en el entorno virtual.

El beneficio es que los paquetes instalados en un entorno virtual no se meten con el python que usa el sistema y hay muchas formas de automatizar el manejo del proyecto.

Sé que esta puede ser una respuesta muy antigua, pero me tomó dos días resolver el problema, así que voy a compartir.

La forma correcta de administrar las versiones de Python en tu sistema para trabajar en diferentes proyectos sin que te vuelvan loco es usar pyenv y sus complementos pyenv-virtualenv y pyenv-virtualenvwrapper como lo describe Henrique Bastos en esta publicación de blog . Tenga en cuenta que esta forma de trabajar es un poco independiente de la plataforma, ya que pyenv es un paquete de python y se puede ejecutar de manera similar en Windows, Linux y Mac OSx.

Los problemas comienzan con Arch Linux. El sistema operativo no proporciona una versión pacman de pyenv, por lo que debe instalarla clonándola desde github como se describe en la sección de instalación de la versión . El proceso de instalación es el mismo para pyenv-virtualenv y pyenv-virtualenvwrapper. Tenga en cuenta que la configuración de inicialización del shell puede ser diferente, en mi caso no funcionó para ~ / .bash_profile, pero funcionó para ~ / .bashrc.

Ejecutar pyenv no es sencillo si su instalación es muy nueva como la que estoy configurando en estos días, ya que pip requiere openSSL e incluso si lo instala a través de pacman, pyenv no lo ve. Por lo tanto, si desea instalar una versión anterior de Python (a saber, 3.4.3), encontrará que el shell se queja de que no ha instalado el complemento openSSL, incluso si lo tiene . Para ser honesto, no tuve los paquetes correctos la primera vez que intenté instalarlo; tienes que descargar los siguientes paquetes

 sudo pacman -S openssl sudo pacman -S openssl-1.0 sudo pacman -S python-pyopenssl sudo pacman -S python2-pyopenssl 

La forma en que resolví el problema es agregar los indicadores como se describe en las Preguntas frecuentes de instalación de pyenv : esa solución finalmente me llevó a instalar la versión de python que quería:

 LDFLAGS="-L/usr/lib/openssl-1.0" \ CFLAGS="-I/usr/include/openssl-1.0" \ pyenv install -v 3.4.3 

Para evitar ir a la página de Preguntas frecuentes cada vez que desee renovar el entorno de instalación de Python, puede agregar un alias en ~ / .bashrc o lo que sea que esté usando como sigue:

 echo alias pyenv='LDFLAGS="-L/usr/lib/openssl-1.0" \ CFLAGS="-I/usr/include/openssl-1.0" \ pyenv' >> ~/.bashrc 

De este modo, puede instalar python correctamente con una syntax de pyenv limpia y administrarlo a través de sus complementos de la misma manera (ya que la syntax es pyenv [COMANDO] [OTHERSTUFF]).