Distribución de paquetes en Python

Distribución de paquetes en Python

Es muy importante saber como empaquetar nuestros programas programados en Python. Con estos paquetes podemos crear códigos en un futuro de formma más cómoda y poder compartirlos con otros desarrolladores en la comunidad de código abierto.

PyPI (Python Package Index)

PyPI es el repositorio oficial de paquetes de Python. Es el lugar donde los desarrolladores pueden publicar y compartir sus paquetes con la comunidad de Python. Los usuarios pueden buscar, descargar e instalar paquetes desde PyPI utilizando herramientas como pip. (https://pypi.org/)

Distribución de paquetes en Python

Muchas veces, cuando desarrollamos una aplicación en Python para resolver algún problema específico. Es posible que queramos compartir esa solución con otros desarrolladores o incluso reutilizarla en otros proyectos. Aquí es donde entra en juego la distribución de paquetes en Python. Para que nos pongamos en contexto, imáginate que vamos a usar Pandas en un proyecto, esta librería es muyh conocida para el manejo de datos usando Python. Esta librería podemos instalarla con el gestor de paquetes pip o bien con uv que es otro gestor de paquetes más moderno y rápido.

Distribución de paquetes con setuptools

setuptools es una biblioteca de Python que facilita la creación, distribución e instalación de paquetes de Python. Proporciona herramientas para definir metadatos del paquete, gestionar dependencias y crear archivos de distribución. Para poder empaquetar nuestro paquete debe tener una estructura de directorios específica. Aquí tienes un ejemplo básico de cómo debería verse la estructura de tu proyecto:

│├── my_package/
│   ├── __init__.py
│   ├── module1.py
│   └── module2.py

│├── setup.py
│└── README.txt
│└── MANIFEST.in
│└── LICENSE

Cada uno de estos elementos tiene un propósito específico:

Para poder empezar con el empaquetammiento de nuestro código necesitamos tener instalado dos librerías.

pip install wheel
pip install twine

Vamos a usar de ejemplo un proyecto que hemos llamado javi-primo. El código lo hemos creado en un fichero .py que contiene una función que nos dice si un número es primo o no.

# javi_primo.py
def es_primo(numero):
    if numero < 2:
        return False
    for i in range(2, int(numero**0.5) + 1):
        if numero % i == 0:
            return False
    return True

Y como hemos hablado anteriormente de los archivos y la estructura que debe tener nuestro proyecto, vamos a crear los archivos necesarios para empaquetar nuestro código.

from setuptools import setup

long_description = (
   open('README.md').read()
   + '\n' +
   open('LICENSE').read()
   '\n'
)

setup(
   name='javi-primo',
   version='0.5.0',
   author='Javi Lazaro',
   author_email= "hola@javilazaro.es",
   description='Calcular si "n" es un número primo o no',
   long_description=long_description,
   classifiers=[
      # Indica la estabilidad del proyecto teniendo en cuenta qu elos valores más comunes son:
      # 3 - Alpha: Desarrollo inicial, puede cambiar en cualquier momento.
      # 4 - Beta: Funcionalidad completa pero puede tener errores.
      # 5 - Production/Stable: Listo para producción, con pocos o ningún error
         'Development Status :: 4 - Beta',
      # Indica el público objetivo y el ámbito de uso del proyecto.
         'Intended Audience :: Developers',
         'Topic :: Software Development :: Build Tools',
      # Indica la licencia del proyecto. Debe coincidir con el archivo LICENSE.
         'License :: OSI Approved :: MIT License',
      # Indica los lenguajes de programación compatibles con el proyecto.
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
         'Operating System :: OS Independent',
   ],
   keywords='primo, numero primo, javi, lazaro',
   license='MIT License'
   packages=['javi_primo'],
)

Una vez creado el archivo vamos a utilizar la herramienta wheel cómo habíamos comentado más que nada por su rapidez y su facilidad de uso. Para construir el paquete debemos ejecutar el siguiente comando en la terminal:

python setup.py bdist_wheel

Una vez ejecutado el comando, se creará un directorio llamado dist/ en el que se generará un archivo .whl que es el paquete distribuible de nuestro proyecto. Hay doos caminos a seguir:

Para instalar el paquete localmente, puedes usar el siguiente comando:

pip install dist/javi_primo-0.5.0-py3-none-any.whl

Para comprobar que el paquete ha sido instado correctamente.

pip list --user --format=freeze | grep "javi-primo"
pip freeze local | grep javi-primo

En este momento veremos el paquete instalado en nuestro entorno de Python. Si lo instalas desde PyPI, puedes usar el siguiente comando:

pip install javi-primo

Subiendo el paquete a PyPI

Para subir el paquete a PyPI, primero debes asegurarte de tener una cuenta en PyPI. Si no tienes una cuenta, puedes crear una en https://pypi.org/account/register/. Una vez que tengas una cuenta, puedes usar la herramienta twine para subir tu paquete. Ejecuta el siguiente comando en la terminal:

twine upload dist/*

¿Listo para hacer crecer tu negocio?

Analicemos tu proyecto y definamos la estrategia perfecta para alcanzar tus objetivos

Solicitar consultoría gratuita