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.
Sostengo que las dos dificultades principales para el empaquetado de Python son
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.
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:
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".
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.
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.
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.
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