Cómo crear una librería de Python
Crea tu librería de Python de cero y compártela con el resto del mundo. ¡Tu librería de Python podrá instalarse con un simple pip install!
Si alguna vez te has planteado cómo crear una librería de Python has llegado al lugar correcto.
Pero, ¿qué es una librería en programación?
En programación, una librería es un conjunto de funcionalidades empaquetadas que permiten a los usuarios realizar nuevas tareas que inicialmente no podían llevar a cabo
En Python existen un montón de librerías que utilizamos diariamente, entre otras:
- Numpy y Pandas para tratamiento numérico y tabular
- Sklearn para machine learning
- Matplotlib y Seaborn para visualización
- Requests y bs4 para web scraping
Muchas veces el día a día nos impide darle un “second order thinking” a las cosas, como por ejemplo:
- ¿Cómo se programaron esas librerías que tanto usamos?
- ¿Puedo yo programar una librería?
- ¿Cómo podría compartir mis funciones para que otras personas se beneficien de mi esfuerzo y trabajo?
Pero, ¿y si queremos crear nuestra propia librería de Python y publicarla para que todo el mundo pueda instalarla y utilizarla?
En este artículo vamos a crear una librería de python y utilizaremos una adaptación del código que programé para extraer información de ficheros PDF de la CNMV:
¡Vamos a por ello!
1. Estructura de una librería de Python
Básicamente necesitaremos crear las siguientes carpetas y ficheros:
En nuestro caso particular vamos a llamar a la librería “Leer_PDF” y vamos a crear esta estructura de carpetas y ficheros (sin código todavía):
Vamos a ver rápidamente qué debe incluir cada archivo:
- Funciones.py : fichero que llamaremos como nos de la gana y donde se incluirán las funciones que luego pueden importarse
- __init__.py : fichero gracias al cual Python interpreta que está delante de una librería. Puede estar en blanco, sin código
- setup.py : instrucciones para poder instalar nuestra librería, como por ejemplo, requisitos previos de instalación de otras librerías
- README.md : fichero en formato Markdown en el que incluiremos información sobre nuestra librería (es opcional)
2. Código de los ficheros
Vamos a empezar a escribir el código dentro de cada fichero
2.1. Funciones.py
En este archivo incluiremos todas aquellas librerías que son necesarias importar para que funcione nuestras nuevas funciones (como pandas, numpy, etc) y las propias funciones que nosotros vamos a definir.
En este ejemplo sencillo lo único que vamos a definir es una función “leer_pdf” al cual le enviaremos el path de un fichero y tratará de leer el contenido. Si no encuentra ningún error, imprimirá el resultado. En caso contrario no pasará nada.
Vemos el código:
2.2. __init__.py
Este fichero lo podemos dejar en blanco. Si lo dejamos en blanco, a la hora de utilizar nuestra función en Python deberemos invocarla así:
from Leer_PDF.Funciones import leer_pdf
No es una manera muy elegante de invocar a nuestra función. Si queremos simplificarlo simplemente incluiremos en el fichero __init__.py las siguientes líneas de código:
from .Funciones import leer_pdf
Ahora sí que cualquiera que utilice nuestra librería podrá invocar a la función de la siguiente manera:
from Leer_PDF import leer_pdf
Nota: es muy IMPORTANTE incluir la ruta relativa del fichero. En este caso, Funciones.py está en el mismo directorio que __init__.py por lo que solo tenemos que añadir un punto delante del nombre
2.3. setup.py
Quizás este sea el documento más “complejo”, pero nada del otro mundo. Una configuración básica de este fichero sería:
Los campos más importantes serían:
- Version: según mejores tu librería y le incluyas más funcionalidades, deberás incrementar la versión
- name: este nombre debe coincidir con el nombre de la carpeta, así se llamará tu librería. Si lo vas a subir a internet el nombre no puede estar en uso
- install_requires: librerías necesarias para que funcione tu librería
2.4. README.md
Simplemente se trata de un documento en formato Markdown donde se debe describir para qué sirve nuestra librería, formas de utilizarlo, etc.
Un ejemplo sencillo y básico de un fichero README.md para nuestra librería “leer_pdf” podría ser:
3. Publicar nuestra librería de Python en internet
Si hemos seguido los pasos, tendremos un carpeta con los siguientes ficheros y los códigos del apartado 2.
¿Qué es lo siguiente? publicar nuestra librería en internet para que todo el mundo pueda acceder a la misma.
3.1. Empaquetado de la librería y creación de los ficheros dist (distribution packages)
Ahora que ya tenemos todos los ficheros, tendremos que empaquetar nuestra librería para poder subirla al repositorio PyPI y que todo el mundo pueda descargarla.
Para ello primeros ejecutaremos el fichero setup.py en la consola de Linux o a través de la línea de comandos de Visual Studio Code si estás en Windows, por ejemplo:
python setup.py sdist bdist_wheel
Si todo va bien se os creará una nueva carpeta llamada “dist” que contendrá la librería empaquetada lista para su distribución
3.2. Publicar librería en PyPI y PyPI test
Ahora que ya tenemos empaquetada nuestra librería solo nos quedará publicarla en algún repositorio online, como PyPI.
Antes de colgarla en abierto para todo el mundo, es conveniente realizar una primera prueba en PyPI test y cuando estemos seguros lo publicamos en PyPI.
Requisitos:
- Crearse una cuenta en PyPI test — https://test.pypi.org/
- Crearse una cuenta en PyPI — https://pypi.org/
- Instalar la librería twine — pip install twine
a) Primera publicación en PyPI test:
Básicamente se trata de subir los ficheros mediante twine:
twine upload --repository testpypi dist/Leer_PDF-0.0.1.tar.gz dist/Leer_PDF-0.0.1-py3-none-any.whl
Introducimos nuestro usuario y contraseña y si todo va bien…
Ahora podemos verificar que se ha instalado correctamente mediante Google Colab, por ejemplo:
b) Publicación definitiva en PyPI:
Si ya habéis probado en a subir vuestra librería en PyPI test y funciona, es hora de cargar vuestra librería en PyPI:
twine upload dist/Leer_PDF-0.0.1.tar.gz dist/Leer_PDF-0.0.1-py3-none-any.whl
¡Y listo!
Aquí podéis ver mi primera librería de Python publicada:
Si te ha gustado puedes seguir leyendo algún otro artículo: