Cómo compartir tus paquetes de Python

Visión general

Los paquetes de Python son los componentes básicos de las aplicaciones de Python. Encapsulan alguna funcionalidad coherente que puede ser importada y utilizada por muchas aplicaciones y sistemas. Pero primero, los desarrolladores necesitan 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 puede usar repositorios de paquetes privados para paquetes propietarios.

En este tutorial aprenderá cómo compartir sus propios paquetes con la comunidad. Si tiene paquetes propietarios que necesita compartir solo dentro de su empresa, también aprenderá cómo hacerlo..

Para obtener más información, consulte Cómo usar los paquetes de Python y Cómo escribir sus propios paquetes de Python. 

¿Qué es PyPI??

PyPI significa el índice del paquete de Python. Es un repositorio público para subir tus paquetes. Pip conoce PyPI y puede instalar y / o actualizar paquetes desde PyPI. PyPI solía llamarse la "Tienda de queso" después del famoso boceto de Monty Python. Si oye que las personas se refieren a "Cheese Shop" en un contexto de empaquetado de Python, no se alarme. Es solo PyPI.

Preparar un paquete para subir

Antes de subir un paquete, necesitas tener un paquete. Usaré el paquete de Conman que presenté en el artículo Cómo escribir sus propios paquetes de Python. Dado que PyPI contiene miles de paquetes, es muy importante poder describir su paquete correctamente si desea que la gente lo encuentre. PyPI admite un impresionante conjunto de etiquetas de metadatos para que las personas encuentren el paquete adecuado para el trabajo.

El archivo setup.py contiene mucha información importante que se usa para instalar el paquete. Pero también puede incluir los metadatos utilizados para clasificar su paquete en PyPI. Los paquetes se clasifican utilizando múltiples etiquetas de metadatos. Algunos de ellos son textuales y otros tienen una lista de valores posibles. La lista completa está disponible en la página Clasificadores de listas de PyPI.

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

desde setuptools importar configuración, buscar configuración de paquetes (nombre = 'conman', versión = "0.3", url = "https://github.com/the-gigi/conman", license = "MIT", author = "Gigi Sayfan" , author_email = "[email protected]", description = "Administrar archivos de configuración", clasificadores = ['Development Status :: 3 - Alpha', 'Audiencia deseada :: Desarrolladores', 'Tema :: Desarrollo de software :: Libraries ',' License :: OSI Approved :: MIT License ',' Programming Language :: Python :: 2 ',' Programming Language :: Python :: 2.6 ',' Programming Language :: Python :: 2.7 ',], packages = find_packages (exclude = ['tests']), long_description = open ('README.md'). read (), zip_safe = False, setup_requires = ['nose> = 1.0'], test_suite = "nose.collector" )

Crea una cuenta

Necesitas crear una cuenta en PyPI para poder cargar paquetes. Rellene este formulario y verifique su identidad haciendo clic en la URL en el correo electrónico de verificación. Ahora, necesitas crear un .pypyrc archivo en su directorio de inicio que contendrá la información necesaria para cargar paquetes.

[distutils] index-servers = pypi [pypi] repository = https://pypi.python.org/pypi username = the_gigi 

También puede agregar su contraseña, pero es más seguro si no lo hace en caso de que algún elemento defectuoso se apodere de su computadora portátil. Esto es especialmente importante si carga paquetes populares porque si alguien puede cargar o actualizar sus paquetes, todas las personas que usen estos paquetes serán vulnerables..

Pruebas

Si desea probar el proceso de registro y carga del paquete y no preocuparse por publicar algo incompleto, puede trabajar con el sitio de prueba PyPI alternativo. Amplíe su archivo ~ / .pypirc para incluir una sección 'pypitest'.

[distutils] index-servers = pypi pypitest [pypitest] repository = https://testpypi.python.org/pypi username = the_gigi [pypi] repository = https://pypi.python.org/pypi username = the_gigi 

Recuerde que el sitio de prueba se limpia regularmente, así que no confíe en él. Está destinado sólo para fines de prueba.

Registre su paquete

Si esta es la primera versión de su paquete, necesita registrarlo con PyPI. Twine tiene un comando de registro, pero no puedo averiguar cómo usarlo. Si se sigue la documentación, se produce un error y, al verificar las pruebas unitarias del hilo, no hay ninguna prueba para el comando de registro. Oh bien. También puede hacerlo manualmente utilizando este formulario para cargar el archivo PKG-INFO. Si usa Python 2.7.9+ o Python 3.2+, también puede registrarse de forma segura usando Python registro setup.py.

Registremos a conman en el sitio de prueba PyPI. Nota la -r pypitest, el cual basado en la sección de ~ / .pypirc se registrará en el sitio de prueba.

python setup.py register -r pypitest ejecuta el registro egg_info escribiendo conman.egg-info / PKG-INFO escribiendo nombres de nivel superior en conman.egg-info / top_level.txt escribiendo dependency_links en conman.egg-info / dependency_links.txt archivo de manifiesto 'conman.egg-info / SOURCES.txt' leyendo la plantilla de manifiesto 'MANIFEST.in' escribiendo el archivo de manifiesto 'conman.egg-info / SOURCES.txt' ejecutando la contraseña. Registro: conman en https: //testpypi.python. Respuesta del servidor org / pypi (200): OK

Guita

Puedes subir un paquete usando python setup.py subir, pero no es seguro, ya que solía enviar su 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 tiene beneficios adicionales como cargar distribuciones creadas previamente y es compatible con cualquier formato de empaquetado, incluidas las ruedas. Usaré guita para la carga real.

Twine no forma parte de la biblioteca estándar, por lo que debe instalarlo: pip instalar hilo.

Sube tu paquete

Finalmente, es hora de subir el paquete.. 

> twine upload -r pypitest -p ******* dist / * Subida de distribuciones a https://testpypi.python.org/pypi Subiendo conman-0.3-py2-none-any.whl Subiendo conman-0.3-py2 .py3-none-any.whl Subiendo conman-0.3.tar.gz

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

Prueba tu paquete

Una vez que su paquete está en PyPI, debe asegurarse de que puede instalarlo y todo funciona. Aquí creo un entorno virtual de una sola vez, pip instala conman desde el sitio de prueba de PyPI y luego lo importo. Es posible que desee realizar pruebas más exhaustivas para su paquete.

> mkvirtualenv test_conman_pypi Nuevo ejecutable de python en test_conman_pypi / bin / python2.7 También creando ejecutables en test_conman_pypi / bin / python Instalando setuptools, pip… listo. Uso: la desactivación de la fuente elimina el directorio 'bin' del entorno activado con la 'activación de la fuente' de PATH. (test_conman_pypi)> pip install -i https://testpypi.python.org/pypi conman Descargando / desempaquetando conman Descargando conman-0.3-py2-none-any.whl Almacenando la descarga en caché en /Users/gigi/.cache/pip /https%3A%2F%2Ftestpypi.python.org%2Fpackages%2Fpy2%2Fc%2Fconman%2Fconman-0.3-py2-none-any.whl Instalando los paquetes recolectados: conman Conman instalado correctamente Limpiando… (test_conman_pypi)> python Python 2.7 .10 (predeterminado, 10 de junio de 2015, 19:43:32) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] en darwin Escriba "ayuda", "derechos de autor", "créditos" o "licencia" para más información. >>> importar conman >>>

Tenga en cuenta que la distribución de la rueda se instaló por defecto.

Versiones

Cuando evolucione sus paquetes y cargue nuevas versiones, es importante seguir un esquema de versiones sensato. La gente se molestará bastante si una actualización involuntaria rompe su código. Su esquema de versiones debe cumplir con PEP-440 - Identificación de versión y especificación de dependencia. 

Esta especificación permite múltiples esquemas para elegir. Recomiendo usar el popular esquema de versionamiento semántico. Es bastante "..", que corresponde a PEP-440's"..". Solo tenga cuidado con las versiones que continúan con el guión o con los signos 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 se les permite compartirlos públicamente en PyPI. Esto no es un problema. Puede compartir paquetes en repositorios de paquetes privados bajo su control. 

Tenga en cuenta que a veces es posible que desee tener un repositorio de paquetes privados bajo su control solo para administrar sus dependencias de terceros. Por ejemplo, el autor de un paquete puede decidir eliminar un paquete de PyPI. Si su sistema se basa en poder instalar este paquete desde PyPI, tiene problemas.

Devpi

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

  • Espejo rápido de PyPI
  • Subida, prueba y puesta en escena con índices privados.
  • Herencia de índice
  • Interfaz web y búsqueda
  • Replicación
  • Importar / Exportar
  • 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 pitones. Hay un proceso simplificado asistido por herramientas para empaquetar y cargar paquetes y facilitar su búsqueda e instalación.. 

Si necesita mantener las cosas en privado, Devpi está aquí para usted como un repositorio de paquetes privado maduro y sólido.