19 puntos por GN⁺ 2024-03-26 | 7 comentarios | Compartir por WhatsApp
  • Permite cambiar fácilmente entre varias versiones de Python
  • Sigue la tradición de herramientas UNIX de propósito único: simple, discreta y que funciona bien
  • Este proyecto se bifurcó de rbenv y ruby-build, y fue adaptado para Python

Qué hace pyenv

  • Permite cambiar la versión global de Python por usuario.
  • Ofrece soporte para versiones de Python por proyecto.
  • Permite sobrescribir la versión de Python usando variables de entorno.
  • Puede buscar comandos de varias versiones de Python al mismo tiempo. Es útil para probar entre versiones de Python usando tox.

Qué no hace pyenv...

  • No depende de Python en sí. pyenv está hecho como un script de shell puro.
  • No necesita cargarse en el shell. En su lugar, usa un enfoque de shim agregando un directorio a PATH.
  • No gestiona virtualenv. Claro, el usuario puede crear virtualenvs manualmente o automatizarlo usando pyenv-virtualenv.

Cómo funciona

  • pyenv intercepta los comandos de Python usando ejecutables shim inyectados en PATH, determina la versión de Python especificada por la aplicación y luego pasa el comando a esa instalación de Python.

Entender PATH

  • Cuando ejecutas un comando como python o pip, el sistema operativo busca un ejecutable con ese nombre en la lista de directorios de la variable de entorno PATH.

Entender los shims

  • pyenv inserta un directorio de shims al inicio de PATH. Mediante el proceso de rehashing, mantiene shims para todos los comandos de Python de todas las versiones de Python instaladas.

Entender la selección de versión de Python

  • Cuando se ejecuta un shim, pyenv lee y usa la versión de Python desde las siguientes fuentes, en este orden:
    1. La variable de entorno PYENV_VERSION (si está definida).
    2. El archivo .python-version específico de la aplicación en el directorio actual (si existe).
    3. El primer archivo .python-version encontrado al buscar en cada directorio padre hasta llegar a la raíz del sistema de archivos (si existe).
    4. El archivo global $(pyenv root)/version.

Encontrar la ubicación de la instalación de Python proporcionada por pyenv

  • Según la versión de Python que pyenv determine, pasa el comando a esa instalación de Python.
  • Cada versión de Python se instala en su propio directorio dentro de $(pyenv root)/versions.

Uso

Instalar versiones adicionales de Python

  • Usa pyenv install para instalar versiones adicionales de Python.

Resolución automática a la versión más reciente

  • Todos los subcomandos de Pyenv, excepto uninstall, resuelven automáticamente un prefijo completo a la versión más reciente.

Versiones de Python con soporte extendido

  • Hay versiones de Python a las que se les aplican parches aportados por usuarios para agregar soporte en entornos específicos.

Cambiar entre versiones de Python

  • Para usar una versión de Python instalada por Pyenv, ejecuta uno de los siguientes comandos:
    • pyenv shell
    • pyenv local
    • pyenv global

Eliminar versiones de Python

  • Con el tiempo, las versiones de Python se acumulan en el directorio $(pyenv root)/versions.
  • Para eliminar una versión antigua de Python, usa pyenv uninstall .

Otras tareas

  • Para ver la lista de todos los subcomandos disponibles, ejecuta pyenv commands.

Eliminar pyenv

  • Es fácil desactivar temporalmente Pyenv o eliminarlo del sistema.

Plugins de Pyenv

  • Puedes ampliar y personalizar la funcionalidad de Pyenv de una manera simple, flexible y mantenible usando plugins.

Configuración avanzada

  • Hay variables de entorno que controlan el comportamiento de Pyenv.

Desarrollo

  • El código fuente de Pyenv está alojado en GitHub.
  • Las pruebas se ejecutan usando Bats.

Opinión de GN⁺

  • pyenv es una herramienta muy útil para gestionar distintas versiones de Python. Es especialmente útil para desarrolladores que necesitan usar diferentes versiones de Python en varios proyectos.
  • Como esta herramienta no depende de Python en sí y está compuesta por scripts de shell puros, puede instalarse y administrarse incluso en sistemas donde Python no está instalado.
  • pyenv no gestiona virtualenv directamente, pero es conveniente porque permite automatizar su gestión mediante el plugin pyenv-virtualenv.
  • Como la instalación y el uso son relativamente sencillos, incluso ingenieros de software principiantes que necesiten gestionar versiones de Python pueden adoptarlo fácilmente.
  • Otra herramienta que ofrece funciones similares a pyenv es conda, ampliamente usada especialmente en ciencia de datos y aprendizaje automático. Como conda ofrece tanto gestión de paquetes como de entornos, puede recomendarse a usuarios que necesiten esas funciones.
  • Al adoptar pyenv, se debe tener cuidado si hay varias versiones de Python instaladas en el sistema para evitar conflictos de rutas. El beneficio de usar pyenv es la facilidad para gestionar versiones, pero una configuración incorrecta puede interferir con la ruta del Python predeterminado del sistema.

7 comentarios

 
koxel 2024-03-26

Con conda, tengan cuidado: en empresas de cierto tamaño
es de pago.
Aunque la empresa sea pequeña, si el cliente principal es grande, se vuelve complicado entregarlo.

 
koxel 2024-03-26

Conda en sí es gratuito bajo BSD, pero revisa bien las licencias del repositorio y de los paquetes.

 
tujuc 2024-03-26

Tengo asdf configurado en el nivel superior: https://asdf-vm.com/

Y por proyecto, a veces lo configuro con local, y otras uso contenedores...

Como han salido muchas formas nuevas de configurar + gestionar entornos, la verdad es que ya casi no lo uso... jajaja

 
sngwn 2024-03-26

Yo también lo uso exactamente así.
jajaja, personalmente siento que pyenv se ha quedado un poco anticuado.

 
joyfui 2024-03-26

Como siguen apareciendo cosas como rbenv, pyenv y nodenv, al final también terminó surgiendo algo llamado anyenv. jaja
https://github.com/anyenv/anyenv

 
GN⁺ 2024-03-26
Opiniones de Hacker News
  • Advertencia sobre el uso de pyenv

    • pyenv tiene la gran desventaja de compilar Python en la máquina del usuario.
    • Hay muchísimos modos de fallo que pueden ocurrir en esta situación.
    • pyenv no es una herramienta para que principiantes resuelvan problemas de empaquetado de Python, sino una herramienta para expertos orientada a estandarizar la configuración.
    • Muchos usuarios sufren problemas causados por pyenv, pero a menudo ni siquiera se dan cuenta.
  • El sufrimiento de los programadores de Python

    • Sorprende la cantidad de dificultades innecesarias que enfrentan los programadores de Python.
    • Tener que instalar varias versiones de Python es irracional.
    • La idea de que un programa de Python funcione en cualquier lugar no es práctica.
    • Todo es frágil y no funciona sin la versión exacta del lenguaje.
    • Los problemas de dependencias son tan graves que se termina necesitando un gestor del gestor de paquetes.
  • Herramientas para mantener estables los programas de Python

    • Lista de herramientas que garantizan que un programa de Python siga funcionando igual que cuando se escribió por primera vez.
    • Existen varias herramientas como requirements.txt, pip, pipenv, pyenv y virtualenv.
  • Introducción a la herramienta Mise

    • Mise, escrita en Rust, es como asdf pero más rápida y sin shims por defecto.
    • Instala runtimes en paralelo y descarga los plugins necesarios.
    • Puede usarse como una herramienta mejor que asdf o pyenv.
  • Ventajas de ASDF

    • ASDF no solo soporta Python, sino también varios lenguajes y herramientas como Rust, Go y Node.
  • Experiencia de uso con pyenv

    • Al principio no hubo problemas al usar pyenv, pero empezaron a aparecer después de instalar varias versiones de Python.
    • En lugar de pyenv, es más estable descargar Python desde python.org y gestionar entornos virtuales con python<version> -m venv /my/virtual/env.
  • Stack personal para gestionar Python

    • Se usa pyenv para gestionar versiones de Python y venv para crear un nuevo entorno virtual en cada proyecto.
    • Para la inicialización del proyecto y la gestión de dependencias se usa Poetry.
    • Si se usa Dropbox, se agrega la carpeta .venv a la lista de exclusión.
    • pyenv funciona bien en Ubuntu después de reunir todas las dependencias necesarias.
  • Gestión de dependencias de runtime con Mise

    • Se usa mise para manejar de la misma manera la mayoría de las dependencias de runtime, como Python, Node, Ruby y Terraform.
    • También puede activar entornos virtuales de Python.
  • Flujo de trabajo en macOS

    • Se descargan los binarios de Python necesarios desde python.org y se configuran entornos virtuales con virtualenv.
    • Se usan pyproject.toml y pip-compile para gestionar proyectos.
    • Ha habido muchos cambios en el espacio de gestión de proyectos de Python, pero con este flujo de trabajo se ha podido ignorar todo eso.
 
edunga1 2024-03-26

Hay muchísimos modos de falla que pueden ocurrir en esta situación.

Siento que este es el punto más doloroso.