Publicar un paquete de Python con UV y Hatchling es rápido y seguro. Aquí verás, paso a paso, cómo configurar el build backend en pyproject.toml, generar artefactos distribuibles y hacer la publicación en TestPyPI con buenas prácticas de seguridad como 2FA y tokens. Ideal para proyectos Python puro y flujos de CI/CD.
¿Cómo elegir y configurar el build backend con uv?
Seleccionar el build backend correcto es clave. Python ofrece varias opciones: SetopToast es flexible pero complejo. Hatchling es moderno, minimalista y veloz. Fleet es extremadamente simple para paquetes puros de Python. Poetry integra backend y gestión de dependencias. UV funciona con cualquiera que declares en pyproject.toml y recomienda Hatchling por defecto para nuevos proyectos.
¿Qué build backends existen y para qué usar Hatchling?
SetopToast: el más antiguo y tradicional. Muy flexible.
Hatchling: moderno, minimalista y rápido. Recomendado por UV.
Fleet: extremadamente simple para Python puro.
Poetry: backend con gestor de dependencias integrado.
Hatchling destaca por su simplicidad y eficiencia. Perfecto para empezar a distribuir sin fricción.
¿Cómo declarar build_system en pyproject.toml?
Define el backend y sus requisitos en la sección correspondiente. La idea es especificar require y el build backend apuntando a “.build”.
¿Cómo construir el paquete y qué archivos genera uv?
Con el proyecto listo y UV configurado, construye los artefactos distribuibles. El comando central es simple y muestra el output con los archivos resultantes.
¿Qué hace el comando uv build?
Ejecuta el proceso de empaquetado del proyecto.
Genera dos archivos listos para publicar: el sdist y el wheel.
uv build
¿Qué significan sdist tar.gz y wheel whl?
tar.gz: el source distribution (sdist). Código fuente empaquetado.
whl: el wheel. Distribución binaria lista para instalar.
Estos son los dos archivos que se suben al manejador de paquetes.
¿Cómo publicar en TestPyPI con seguridad y tokens?
Antes de publicar en PyPI, usa su entorno de pruebas: test.pypi. Así validas que el sistema de build y publicación funciona sin afectar el índice principal.
¿Cómo crear cuenta y activar 2FA en TestPyPI?
Regístrate y verifica tu correo con el enlace enviado.
Activa two factor authentication: genera y guarda códigos de recuperación.
Escanea el QR en tu app de autenticación y valida el código.
Con esto, tu cuenta queda lista y protegida para publicar.
¿Cómo generar y usar un token con uv publish?
Crea un token con alcance al proyecto que vas a publicar.
En tu Makefile, define un comando de publicación usando el token y el índice de pruebas.
Ahora vuelve a publicar con UV y revisa el output. Deberías ver que sube los artefactos, incluso menciona que subió dos versiones.
¿Cómo verificar, buscar e instalar el paquete?
Ve a test.pypi y busca “Platsy News”. Deberías ver la página pública con descripción y README.
Instala con pip usando la URL del índice de prueba y el nombre del paquete.
pip install -i <URL> Platsy News
Con esto, ya puedes instalar, configurar tu entorno y empezar a usar la librería. Felicidades: lograste publicar tu primer paquete en el manejador de paquetes principal de Python. Inspírate, crea librerías open source, y comparte tu trabajo con la comunidad. Como referencia, Luis Martínez menciona su experiencia con Django, FastAPI y arquitecturas en la nube, e invita a pensar como desarrollador avanzado: código limpio, ideas que escalan y despliegue a producción.
¿Tienes dudas o quieres contar cómo te fue publicando tu paquete? Escribe en los comentarios y comparte tu experiencia.
Quiero expresar mi más sincero agradecimiento por el curso. Ha sido una experiencia enriquecedora que me permitió fortalecer mis conocimientos y descubrir nuevas posibilidades en el desarrollo. . ¡Gracias por compartir conocimiento de forma tan accesible y clara!
Con todo el gusto!
✨Publicar un Paquete Python con UV + Hatchling
🧩 1. UV en una Mirada
🔷 ¿Qué es? Herramienta ultra-rápida para construir y publicar paquetes.
🔷 Ideal para: Python puro + CI/CD.
🔷 Funciona con: Cualquier backend definido en pyproject.toml.
🔷 Recomendación oficial:Hatchling para proyectos nuevos.
🟪 Poetry → Backend + gestor de dependencias integrado.
🎯 Mejor elección para empezar:Hatchling, por eficiencia y simplicidad.
📄 3. Configuración del backend (pyproject.toml)
📌 Añade esta sección:
[build_system]
require = ["hatchling"]
build_backend = "hatchling.build"
✔️ Con esto UV ya puede construir tu paquete.
🏗️ 4. Construcción del Proyecto con UV
🔧 Comando principal:
uv build
📦 ¿Qué artefactos obtienes?
🔸 sdist (.tar.gz) → Código fuente empaquetado.
🔸 wheel (.whl) → Distribución binaria lista para instalar.
🎉 Estos dos archivos son los que se publican en los índices (TestPyPI / PyPI).
🚀 5. Publicación en TestPyPI
🎯 ¿Por qué usar TestPyPI?
Permite probar el flujo completo de publicación sin afectar PyPI real.
🔐 5.1 Seguridad: Cuenta y 2FA
🛡️ Pasos esenciales:
1. Crear cuenta en TestPyPI.
2. Verificar correo.
3. Activar 2FA.
4. Guardar códigos de recuperación.
5. Escanear el QR en tu app de autenticación.
6. Confirmar el código generado.
✔️ Tu cuenta queda protegida para publicar.
🔑 5.2 Crear token y publicar con UV
🧰 Makefile recomendado:
publish:
uv publish \
--index test-pypi \
--username __token \
--password $(TOKEN)
▶️ Ejecutar:
make publish
❗ Si falla: probablemente falta registrar el índice TestPyPI en pyproject.toml.
🌐 6. Registrar el índice TestPyPI en UV
📌 Añade:
[tool.uv.index."test-pypi"]
url = "test.pypi.org"
publish-url = "test.pypi.org"
explicit = true
✔️ Después de esto, reintenta publicar.
🔍 7. Verificar e Instalar tu Paquete
🖥️ Verificación:
· Entra a TestPyPI.
· Busca: Platsy News.
· Revisa descripción + README.
📥 Instalación:
pip install -i <URL-del-índice> Platsy News
Hay alguna forma de crear paquetes de python sin tener que subirlas a PyPi? El objetivo de la consulta es para cuestiones empresariales, donde el código que se desarrolla muchas veces es privado y no se puede compartir con la comunidad. Por ejemplo una empresa desarrolla ciertos módulos que pueden servir para usarse en otros proyectos, de modo que en vez de tener que copiar código el código ya existente, se podría crear un paquete de python e instalarlo en el proyecto como dependencia.
Creo que hay una forma de instalar repositorios de git como dependencias, pero no me termina de gustar la solución. Por ejemplo en docker se puede construir un Registry privado y subir/descargar imágenes sin tener que subirlas al DockerHub. Me preguntaba si hay algo por el estilo para Python.