Cómo subir tu propio paquete a PyPi

Cómo subir tu propio paquete a PyPi
pypi

Hola a todos, en el último tutorial que publiqué sobre el conector Python de Automatic API REST tuve que aprender cómo subir un paquete a la plataforma PyPi, con el fin, de que todo el mundo lo pudiera instalar de la siguiente manera: pip install aarpy Así pues, en este tutorial, vamos a aprender cómo subir nuestro propio paquete a la plataforma PyPi de una manera sencilla.

¿Qué es PyPi?

PyPi (Python Package Index) es un repositorio de software para el lenguaje de programación Python. Básicamente es un repositorio, como podría ser github, pero especializado para Python.

Empezamos!

Para poder subir tu propio paquete a PyPi, lo primero que debes hacer es crear una cuenta en la página oficial de PyPi. Una vez que hemos creado la cuenta, vamos a empezar a preparar nuestro paquete para ser subido a PyPi. Para ello, creamos un archivo de configuración llamado .pypirc con el siguiente contenido: [distutils] index-servers = pypi [pypi] repository: https://pypi.python.org/pypi username: {{your_username}} password: {{your_password}} Y lo guardamos en [~/.pypirc]. Este archivo nos va a ahorrar que tengamos que acordarnos de nuestros credenciales.

Preparar el paquete

Una vez que hemos incluido nuestro archivo de configuración, vamos a empezar a preparar el paquete que queremos subir al repositorio PyPi. Así pues, el esquema que tenemos que seguir será el siguiente. root-dir/ setup.py setup.cfg LICENSE.txt README.md mypackage/ __init__.py file1.py file2.py file3.py Podemos observar que en el anterior esquema tenemos que añadir los archivos de configuración setup.py, setup.cfg, License.txt y README.md. A continuación, vamos a ver el propósito de cada uno y como generarlo. El archivo setup.py, deberá contener el siguiente código python: from distutils.core import setup setup( name = 'mypackage', packages = ['mypackage'], # this must be the same as the name above version = '0.1', description = 'my description', author = 'Alejandro Esquiva', author_email = 'alejandro@geekytheory.com', url = 'https://github.com/{user_name}/{repo}', # use the URL to the github repo download_url = 'https://github.com/{user_name}/{repo}/tarball/0.1', keywords = ['testing', 'logging', 'example'], classifiers = [], ) Si observamos con atención el archivo setup.py, podemos observar que es necesario incluir un enlace de descarga de nuestro paquete, para facilitar esto, vamos a hacer uso de GitHub para generar un archivo comprimido que podamos descargar. Para ello, vamos a crear un repositorio en GitHub, con los archivos de nuestro paquete, tal como podéis observar aquí. Seguidamente, vamos a crear un tag en nuestro repositorio para finalmente hacer el push: git tag 0.1 -m "tag description" git push --tags origin master Si ahora accedemos a la dirección https://github.com/{username}/{module_name}/tarball/{tag} se descargará un archivo comprimido que incluye tanto los archivos de configuración, como el paquete. Una vez que tenemos el archivo setup.py, debemos crear también el archivo setup.cfg. El cual contendrá el siguiente contenido: [metadata] description-file = README.md Por último el archivo README.md será usado para describir el paquete tal como lo usamos en Git, el archivo License.txt incluirá la licencia de uso del paquete, como por ejemplo la licencia MIT.

Subir el paquete a PyPi

Una vez que hemos realizado correctamente todos los pasos, vamos a pasar a subir nuestro código a la plataforma PyPi, para ello vamos a instalar previamente el módulo llamado pypi: pip install pypi Una vez que tenemos instalado el módulo pypi, vamos a subir nuestro paquete escribiendo el siguiente comando: python setup.py register -r pypi Seguidamente, ejecuta: python setup.py sdist upload -r pypi Si todo ha ido bien, enhorabuena, acabas de registrar tu primer paquete en pypi, ahora puedes instalar el paquete en cualquier máquina con el comando: pip install <mipaquete> Espero que os haya gustado el tutorial. Podéis comentar cualquier duda sobre el proceso, o preguntar directamente en nuestro Q&A.