Advertisement
  1. Code
  2. Python

Cómo compartir tus paquetes de Python

Scroll to top
Read Time: 7 min

Spanish (Español) translation by Juliana Carvajal (you can also view the original English article)

Descripción general

Los paquetes de Python son los componentes básicos de las aplicaciones de Python.  Encapsulan algunas funciones coherentes que pueden ser importadas y utilizadas por muchas aplicaciones y sistemas.  Pero primero, los desarrolladores deben encontrar su paquete y poder instalarlo. Python proporciona un repositorio público gratuito para paquetes, que es el estándar de facto para compartir paquetes de Python.  También puedes utilizar repositorios de paquetes privados para paquetes propietarios.

En este tutorial aprenderás a compartir tus propios paquetes con la comunidad.  Si tienes paquetes patentados que necesitas compartir solo dentro de tu empresa, también aprenderás a hacerlo.

Para obtener información básica, consulta Cómo usar paquetes de Python y Cómo escribir tus propios paquetes de Python.

¿Qué es PyPI?

PyPI son las siglas de Python Package Index.  Es un repositorio público para cargar tus paquetes. Pip conoce PyPI y puedes instalar y/o actualizar paquetes desde PyPI.  PyPI solía llamarse "Cheese Shop" después del famoso boceto de Monty Python. Si escuchas que la gente se refiere a la "Cheese Shop" en un contexto de empaquetado de Python, no te alarmes. Es solo PyPI.

Preparar un paquete para cargar

Antes de cargar un paquete, debes tener un paquete.  Usaré el paquete conman que presenté en el artículo Cómo escribir tus propios paquetes de Python.  Dado que PyPI contiene miles de paquetes, es muy importante poder describir tu paquete correctamente si deseas que la gente lo encuentre.  PyPI admite un impresionante conjunto de etiquetas de metadatos para permitir que las personas encuentren el paquete adecuado para el trabajo.

El archivo setup.py contiene mucha información importante que se utiliza para instalar tu paquete. Pero también puedes incluir los metadatos utilizados para clasificar tu paquete en PyPI.  Los paquetes se clasifican mediante varias etiquetas de metadatos.  Algunos de ellos son textuales y algunos de ellos tienen una lista de valores posibles.  La lista completa está disponible en la página Clasificadores de lista de PyPI.

Agreguemos algunos clasificadores a setup.py.  No es necesario incrementar el número de versión, ya que son solo metadatos y el código sigue siendo el mismo:

Crea una cuenta

Debes crear una cuenta en PyPI para poder cargar paquetes.  Completa este formulario y verifica tu identidad haciendo clic en la URL en el correo electrónico de verificación.  Ahora, debes crear un archivo .pypyrc en tu directorio de inicio que contendrá la información necesaria para cargar paquetes.

También puedes agregar tu contraseña, pero es más seguro si no lo haces en caso de que algún elemento malo se apodere de tu computadora portátil.  Esto es especialmente importante si cargas paquetes populares porque si alguien puede cargar o actualizar tus paquetes, todas las personas que usan estos paquetes serán vulnerables.

Pruebas

Si deseas probar el proceso de registro y carga del paquete y no preocuparte por publicar algo incompleto, puedes trabajar con el alternativo sitio de prueba de PyPI.  Amplía tu archivo ~/.pypirc para incluir una sección 'pypitest'.

Recuerda que el sitio de prueba se limpia con regularidad, así que no confíes en él.  Está destinado únicamente a fines de prueba.

Registra tu paquete 

Si esta es la primera versión de tu paquete, debes registrarlo con PyPI.  Twine tiene un comando de registro, pero no sé cómo usarlo.  Seguir la documentación produce un error, y al verificar las pruebas unitarias para twine, no hay ninguna prueba para el comando de registro. Oh, bien.  También puedes hacerlo manualmente utilizando este formulario para cargar el archivo PKG-INFO. Si usas Python 2.7.9+ o Python 3.2+, también puedes registrarte de manera segura usando python   setup.py.register.

Registremos conman en el sitio de prueba de PyPI.  Ten en cuenta el -r pypitest, que según la sección en ~/.pypirc se registrará en el sitio de prueba.

Twine

Puedes cargar un paquete usando python setup.py upload, pero no es seguro, ya que solías enviar tu nombre de usuario y contraseña a través de HTTP hasta Python 2.7.9 y Python 3.2.  Twine siempre usa HTTPS y tienes beneficios adicionales como cargar distribuciones creadas previamente, y es compatible con cualquier formato de empaque, incluidas las ruedas.  Usaré twine para la carga real.

Twine no forma parte de la biblioteca estándar, por lo que debes instalarlo: pip install twine.

Carga tu paquete

Finalmente, es hora de cargar el paquete.

Twine subió todos los formatos de distribución, tanto la fuente como las ruedas.

Twine uploaded all the distribution formatsTwine uploaded all the distribution formatsTwine uploaded all the distribution formats

Prueba tu paquete

Una vez que tu paquete esté en PyPI, debes asegurarte de poder instalarlo y de que todo funcione.  Aquí creo un entorno virtual único, pip install conman desde el sitio de pruebas de PyPI y luego lo importo.  Es posible que desees ejecutar pruebas más completas para tu paquete.

Ten en cuenta que la distribución de la rueda se instaló de forma predeterminada.

Control de versiones

Cuando evolucionas tus paquetes y cargas nuevas versiones, es importante seguir un esquema de control de versiones sensato.  Las personas se enojarán bastante si una actualización involuntaria rompe su código. Tu esquema de control de versiones debe cumplir con PEP-440 - Especificación de identificación y dependencia de la versión.

Esta especificación permite elegir entre varios esquemas.  Recomiendo usar el popular esquema de control de versiones semántico.  Es más o menos "<major>.<minor>.<patch>", que corresponde a  “<major>.<minor>.<micro>" de PEP-440.  Solo ten cuidado con las versiones que continúan con el guión o el signo más, que no son compatibles con PEP-440.

Repositorios de paquetes privados

PyPI es genial, pero a veces no quieres compartir tus paquetes.  Muchas empresas y organizaciones tienen equipos de ingeniería que usan Python y necesitan compartir paquetes entre ellos, pero no pueden compartirlos públicamente en PyPI.  Esto no es un problema. Puedes compartir paquetes en repositorios de paquetes privados bajo tu control.

Ten en cuenta que a veces es posible que desees tener un repositorio de paquetes privado bajo tu control solo para administrar tus dependencias de terceros.  Por ejemplo, el autor de un paquete puede decidir eliminar un paquete de PyPI.  Si tu sistema depende de poder instalar este paquete desde PyPI, estás en problemas.

Devpi

Devpi (que significa Development Package Index) es un reemplazo directo del servidor público PyPI.  Es de código abierto y tiene licencia del MIT, por lo que puedes ejecutarlo dentro de tu cortafuegos.  Devpi es muy poderoso y tiene muchas características que le permiten funcionar como tu servidor de empaquetado definitivo:

  • Espejo PyPI rápido
  • Carga, prueba y puesta en escena con índices privados
  • Herencia del índice
  • Interfaz web y búsqueda
  • Replicación
  • Importación/Exportación
  • Integración de Jenkins

Devpi tiene una excelente documentación, un sistema de complementos y está en desarrollo activo con una comunidad vibrante.

Conclusión

Python proporciona una solución completa para alojar tus paquetes y ponerlos a disposición de tus compañeros Pythonistas.  Hay un proceso simplificado asistido por herramientas para empaquetar y cargar paquetes y hacerlos fáciles de encontrar e instalar.

Si necesitas mantener las cosas en privado, Devpi está aquí para ti como un repositorio de paquetes privado maduro y robusto.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.