"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > El empaquetado de Python es fantástico ahora: `uv` es todo lo que necesitas

El empaquetado de Python es fantástico ahora: `uv` es todo lo que necesitas

Publicado el 2024-09-01
Navegar:676

Python Packaging is Great Now: `uv` is all you need

El título de esta publicación es una referencia a Python Packaging is Good Now de Glyph. Creo que es seguro decir que, en estos 8 años, hemos pasado de "Bueno" a "Excelente". Sigue leyendo para conocer mi razonamiento.

¿Qué hace que el empaquetado de Python sea difícil para principiantes?

Sostengo que las dos dificultades principales para el empaquetado de Python son

  • Bootstrapping, es decir, ¡cómo empezar!
  • Activación, es decir, cómo funcionan los venvs en Python (mira mi hilo de Mastodon, ¡es muy difícil de explicar!)

El arranque era un problema que a menudo se pasaba por alto. ¿Deberíamos decirle a la gente que instale Python desde https://python.org? ¿La distribución Anaconda? ¿Cómo evitamos que la gente use el administrador de paquetes del sistema y corra el riesgo de estropearlo todo?

Y no olvide todo el ciclo de vida del entorno virtual. Es una locura lo insensible que me he vuelto como usuario de Python desde hace mucho tiempo, pero cada vez que tengo que explicarlo veo las caras de mis alumnos y pienso "esto no está bien".

Claro, hay otros problemas, como cómo crear y publicar paquetes distribuibles. Pero sostengo que estos no afectan a la mayoría de los principiantes de Python. Además, también están en proceso de abordarse. Sigue leyendo.

Ingrese ultravioleta

El 15 de febrero, Astral lanzó uv y abandoné el barco inmediatamente. Como parte de mi trabajo, habitualmente tengo que instalar muchas dependencias potencialmente conflictivas y uv fue un alivio inmediato.

Pero lo interesante es que ahora uv ha ido mucho más allá de su fase inicial de "pip más rápido" y está cumpliendo su promesa de ser "un administrador de paquetes y proyectos Python integral que es rápido, confiable y fácil de usar".

Volviendo a los problemas de arranque y activación que mencioné al principio, ¿cómo los resuelve uv? Considere esto:

  • uv no depende del propio Python. Los archivos binarios independientes y precompilados se pueden instalar fácilmente en Linux, macOS y Windows.
  • ¡uv python administra las versiones de Python! No es necesario recurrir a mecanismos específicos del sistema operativo, como pyenv, deadsnakes o herramientas pesadas como conda.
  • ¡La herramienta uv gestiona herramientas en entornos centralizados! Ya no se necesitan pipx ni desvanecimientos.
  • uv init crea un pyproject.toml básico utilizando hatchling como backend de compilación y un diseño src funcional con un README vacío y un módulo ficticio.
    • Si necesitas algo más sofisticado, siempre puedes usar una fotocopiadora o un cortador de galletas con alguna plantilla más sofisticada.
  • uv add agrega dependencias a pyproject.toml, crea un venv si no existe uno y los instala.
  • uv lock crea un archivo de bloqueo con todas sus dependencias, que luego puede usar en uv sync.
    • Y si quieres un viejo archivo de requisitos.txt, uv pip compile lo hace por ti, ¡al igual que pip-tools!
  • uv run ejecuta scripts y comandos, nuevamente ¡sin activar entornos explícitamente!

Esencialmente, esto:

$ mkdir uv-playground
$ cd uv-playground
$ uv init
warning: `uv init` is experimental and may change without warning
Initialized project `uv-playground`
$ uv add click
warning: `uv add` is experimental and may change without warning
Using Python 3.12.3 interpreter at: /usr/bin/python3
Creating virtualenv at: .venv
Resolved 3 packages in 66ms
   Built uv-playground @ file:///tmp/uv-playground
Prepared 2 packages in 430ms
Installed 2 packages in 0.62ms
   click==8.1.7
   uv-playground==0.1.0 (from file:///tmp/uv-playground)
$ tree
.
├── pyproject.toml
├── README.md
├── src
│   └── uv_playground
│       ├── __init__.py
└── uv.lock

3 directories, 4 files
$ uv run python -c "from uv_playground import hello; print(hello())"
warning: `uv run` is experimental and may change without warning
Hello from uv-playground!

Por lo tanto, a la pregunta "cómo empiezo a aprender Python en mi computadora", ahora puedes responder universalmente: "instalar uv".

Algunas reflexiones

Sobre el tema de los entornos virtuales, esencialmente estoy de acuerdo con Armin cuando dice

npm se salió con la suya sin ningún equivalente de "activación" y creo que un futuro ecosistema de Python tampoco encontrará mucha utilidad en la activación de virtualenv.

También noté que uv init eligió hatchling. Siempre tuve una ligera preferencia por PDM, pero creo que este podría ser un punto sin retorno.

Leah y sus colaboradores requirieron mucho trabajo para crear este diagrama de decisiones para la guía de empaquetado de PyOpenSci. Pero el hecho de que ahora hay una línea de base que las personas pueden cambiar en caso de que tengan necesidades más específicas (por ejemplo, un backend de compilación con capacidad para Meson o scikit-build) nuevamente proporciona una experiencia de desarrollador mucho mejor.

en conda

El tema de conda vs pip es otra fuente común de confusión. Fui usuario y fanático de Conda desde el día 1, y efectivamente salvó a Python de una muerte muy clara en un momento en el que era muy difícil simplemente instalar cosas en Windows.

En los años siguientes, a menudo me referí a la antigua publicación del blog de Jake VanderPlas que explicaba las diferencias, pero a estas alturas parece una causa perdida.

Los problemas de interoperabilidad entre pip y conda nunca se abordaron por completo, y aunque creo que la gente de Pixi está haciendo un trabajo fantástico, creo que a largo plazo uv ganará.

Reconozco plenamente que los paquetes conda están mejor estructurados en torno a la noción de código que no es Python, y que el mundo actual de "ruedas gruesas en PyPI" es claramente una solución subóptima. Pero todo el ecosistema ha avanzado en esa dirección: la mayoría de los paquetes ahora publican ruedas precompiladas para una rica variedad de plataformas.

En otras palabras: es posible que conda no sea tan útil en 2024 como lo fue en 2014, y podría ser hora de dejar de enseñarlo a principiantes y considerarlo una herramienta avanzada.

Conclusión

La razón por la que es demasiado pronto es que algunos de estos comandos uv aún son experimentales y podrían evolucionar en el futuro. Pero por primera vez, veo claramente una herramienta de flujo de trabajo que cumple con los estándares, es integral, está libre de problemas de arranque, está cuidadosamente diseñada y puede ganar.

Que es lo que muchos críticos del empaquetado de Python querían desde el principio, ¿verdad? No tener que elegir entre muchas herramientas diferentes. Pero creo que uv fue mucho más allá y resolvió otros problemas de la experiencia del desarrollador, por lo que estoy feliz y agradecido.

Estoy usando efectivamente uv para todo y no voy a mirar atrás. Seguiré recomendando esta herramienta a todo el mundo, seguiré hablando de ella y espero que se generalice más.

Declaración de liberación Este artículo se reproduce en: https://dev.to/astrojuanlu/python-packaging-is-great-now-uv-is-all-you-need-4i2d?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3