Búsqueda de sitios web

Cómo publicar su propio paquete Python en PyPi


por Marco Massenzio

¿Quieres compartir tu código Python con otros desarrolladores? ¿Quiere facilitar la vida de sus usuarios al instalar su paquete? Entonces deberías publicar tus paquetes de Python en PyPi.

La buena noticia es que ahora es más fácil que nunca. Esta es una breve guía que lo guiará a través del proceso y le indicará la documentación relevante a lo largo del camino.

Paso 1: cree un archivo setup.py

Los argumentos para setup() están documentados aquí y no son triviales. Un buen ejemplo a seguir es el archivo setup.py de mi proyecto filecrypt.

A continuación se muestra un breve extracto. Nuevamente, asegúrese de leer la documentación para obtener más información sobre esto, ya que explica lo que significan todos estos argumentos mucho mejor que yo, incluso con un artículo completo de Medium para hacerlo:

setup(name='crytto',      description='An OpenSSL-based file encryption                    and decryption utility',      long_description=long_description,      version='0.2.0',      url='https://github.com/massenz/filecrypt',      author='M. Massenzio',      author_email='marco@alertavert.com',      license='Apache2',      classifiers=[          'Development Status :: 4 - Beta',          'Intended Audience :: System Administrators',          'License :: OSI Approved :: Apache Software License',          'Programming Language :: Python :: 3'      ],      packages=['crytto'],      install_requires=[          'PyYAML>=3.11',          'sh>=1.11'      ],      entry_points={          'console_scripts': [              'encrypt=crytto.main:run'          ]      })

Nota: no no confunda setuptools con distutils; aquí está la importación correcta para setup.py:

from setuptools import setup

La parte más complicada es descubrir los nombres de los paquetes y la configuración correcta para sus archivos de script. Probablemente sea mejor decidirlos de antemano, pero siempre puede rectificarlos mientras crea su setup.py.

El mayor desafío es encontrar un nombre de paquete de nivel superior que no entre en conflicto con uno existente. Hasta donde puedo decir, actualmente es principalmente un proceso de prueba y error.

Una vez que setup.py esté en buen estado, puedes intentar construir una rueda:

python setup.py bdist_wheel

Después de hacer eso, es una buena práctica crear un nuevo virtualenv e intentar instalar el nuevo paquete en ese:

virtualenv test_env./test_env/bin/activatepip install dist/my-project.whl

Esto es particularmente útil para probar si los console_scripts se han configurado correctamente.

Si usa clasificadores como en:

classifiers=[     'Development Status :: 4 - Beta',     'Intended Audience :: System Administrators',     'License :: OSI Approved :: Apache Software License',    'Programming Language :: Python :: 3']

…entonces asegúrese de consultar la lista de clasificadores, ya que cualquier otra cosa provocará un error e impedirá el registro.

Registra tu proyecto

Nota: La documentación me indicó que usara cordel para este paso, pero no funcionó. Su experiencia puede ser diferente.

A menos que ya tenga una cuenta en PyPi, deberá crear una y luego iniciar sesión.

Luego puede dirigirse al formulario de registro y cargar su archivo PKG_INFO. Esto se ha creado en un directorio [prj name].egg-info/. Puede que sea necesario un poco de ida y vuelta, mientras intenta apaciguar a los dioses de PyPi para que acepten sus opciones de configuración.

En particular, encontrar un nombre de paquete que no entre en conflicto pero que sea significativo puede requerir más intentos de los esperado. Nuevamente, le recomiendo que planifique, ya que no he podido encontrar una manera fácil de enumerar todos los nombres de los paquetes. Si conoces alguno, asegúrate de dejar un comentario. Notarás que, según PyPi…

There are currently 88906 packages here.

(“aquí” siendo PyPi, al 16 de septiembre de 2016).

Subir a PyPi

Una vez que el registro se realiza correctamente, la carga real es bastante sencilla, utilizando cordel:

twine upload dist/*

Siempre que tenga un ~/.pypirc válido, simplemente le pedirá su contraseña. Entonces sólo necesitas:

$ cat ~/.pypirc [distutils] index-servers=pypi
[pypi] repository = https://upload.pypi.org/legacy/ username = [your username]

Eso es todo. ¡Disfruta construyendo y compartiendo tus paquetes de Python!

Publiqué esto originalmente en mi blog en codetrips.com.

Artículos relacionados