Pyenv – te permite cambiar fácilmente entre múltiples versiones de Python

Rol de pyenv

  • Se usa para instalar y cambiar entre múltiples versiones de Python, independientemente del Python del sistema.
  • Flujos de trabajo comunes:
    • pyenv para versiones del intérprete → venv o pyenv-virtualenv para entornos → Poetry/PDM/pip-tools para dependencias.
    • Igualar runtimes de producción (por ejemplo, un 3.x.y específico) o versiones antiguas/nuevas en la misma máquina.
  • Algunas personas lo usan para construir intérpretes optimizados (LTO, flags nativos de CPU) o para mantener limpios los site-packages del sistema.

Críticas y advertencias de pyenv

  • La preocupación principal: normalmente compila CPython desde el código fuente, lo que:
    • Requiere toolchains de compilación y bibliotecas; a menudo falla en macOS y Linux sin una configuración cuidadosa.
    • Aumenta el tiempo de CI y el tamaño de las imágenes cuando se usa dentro de contenedores.
  • Los shims añaden otra capa donde pueden ocultarse errores de PATH / resolución.
  • Algunos ops/devs informan que han solucionado repetidamente problemas “misteriosos” de Python eliminando pyenv; lo ven como un wrapper que añade modos de fallo y que es más adecuado para expertos que para principiantes.
  • Otros responden que compilar Python es trivial, han usado pyenv durante años sin problemas y valoran el control fino.

Alternativas para versiones y entornos de Python

  • Sistema + venv: muchos defienden python3.X -m venv .venv junto con archivos de requisitos como suficiente para la mayoría del trabajo; simple e integrado.
    • Contraargumento: venv solo usa intérpretes ya instalados y a menudo crea symlinks hacia ellos, así que las actualizaciones del sistema operativo o del instalador pueden cambiar silenciosamente el runtime.
  • Gestores multilenguaje: asdf y mise gestionan Python junto con Node, Ruby, etc.; algunos prefieren mise por rendimiento y una CLI más agradable, reutilizando a menudo plugins de asdf/pyenv.
  • Conda/mamba/pixi: siguen siendo populares donde se necesitan binarios que no son de Python (CUDA, stack geoespacial); pixi añade lockfiles y soporte de PyPI (a través de uv).
  • Docker / Nix:
    • Docker se usa ampliamente para evitar problemas con Python en el host, especialmente con imágenes base de NVIDIA para ML.
    • Nix se destacó como una de las pocas opciones que puede reproducir realmente entornos completos (Python + bibliotecas del sistema) a lo largo del tiempo.

Meta sobre empaquetado de Python

  • Muchos se quejan de la fragmentación: pip, venv, virtualenv, conda, poetry, PDM, pipenv, Rye, uv, pipx, etc.
  • Hay consenso en que no existe una única “bala de plata”, especialmente para principiantes; las recomendaciones van desde “usa solo venv” hasta “usa solo Docker” o “usa Nix si puedes tolerar la complejidad”.