Distribución de paquetes

En Python es posible crear paquetes distribuibles para uso propio o de terceros. Básicamente son paquetes que tienen los scripts creados por nosotros y son suceptibles de ser reutilizados luego de su distribución esté donde esté, sin importar la ubicación ni la ubucación relativa de sus submódulos. Para crear una distribución de paquetes en Python se deben seguir los siguientes pasos:

1.- Crear un archivo llamado setup.py que debe estar en la raíz de la carpeta Python dodne se encuentre el proyecto a empaquetar. Este archivo setup.py va a contener una descripción del paquete que se va a distribuir, incluyendo nombre, versión, descripción, autor, etc.

2.- La primera instrucción que debe contener el archivo setup.py es el llamado al módulo setup del archivo setuptools:

from setuptools import setup

3.- Luego se deben especificar algunos datos relacionados a la distribución del paquete:

setup(    
    name='vehiculos',
    version='1.0',
    description='Paquete de creación de vehículos',
    author='César G. Gamboa P.',
    author_email='cesargamboa13@hotmail.com',
    url='https://sopainformatica.blogspot.com/',
    packages=['modularizacion II.modulos']
)

Hay que tomar en cuenta que los paquetes que se desean incluir en la propiedad 'packages' deben estar entre corchetes y separados por coma, debiéndose incluir la ruta relativa de carpetas y subcarpetas en relación al archivo setup.py, donde se encuentre el archivo .py que componga el módulo que se desea incluir como paquete.

4.- Ejecutar por línea de comandos python setup.py sdist en la carpeta donde se ha creado el archivo setup.py.

En el caso del ejemplo mostrado, se van a realizar diferentes procesos mostrando lo siguiente por pantalla:

running sdist

running egg_info

writing vehiculos.egg-info\PKG-INFO

writing dependency_links to vehiculos.egg-info\dependency_links.txt

writing top-level names to vehiculos.egg-info\top_level.txt

reading manifest file 'vehiculos.egg-info\SOURCES.txt'

writing manifest file 'vehiculos.egg-info\SOURCES.txt'

warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md


running check

creating vehiculos-1.0

creating vehiculos-1.0\modularizacion II

creating vehiculos-1.0\modularizacion II\modulos

creating vehiculos-1.0\vehiculos.egg-info

copying files to vehiculos-1.0...

copying setup.py -> vehiculos-1.0

copying modularizacion II\modulos\__init__.py -> vehiculos-1.0\modularizacion II\modulos

copying modularizacion II\modulos\vehiculos.py -> vehiculos-1.0\modularizacion II\modulos

copying vehiculos.egg-info\PKG-INFO -> vehiculos-1.0\vehiculos.egg-info

copying vehiculos.egg-info\SOURCES.txt -> vehiculos-1.0\vehiculos.egg-info

copying vehiculos.egg-info\dependency_links.txt -> vehiculos-1.0\vehiculos.egg-info

copying vehiculos.egg-info\top_level.txt -> vehiculos-1.0\vehiculos.egg-info

Writing vehiculos-1.0\setup.cfg

Creating tar archive

removing 'vehiculos-1.0' (and everything under it)

5.- Podemos comprobar que Python ha creado 2 carpetas dentro de la carpeta que contiene el archivo setup.py. Una llamada vehiculos.egg-info y la otra llamada dist. La carpeta dist contiene un archivo comprimido en formato .tar, el cual es el distribuible para compartir de manera digital. En nuestro caso en este ejemplo en concreto se ha creado un archivo llamado vehiculos-1.0.tar.

6.- Para que un tercero o nosotros mismos podamos usar el paquete distribuible, es necesario acceder a la ubicación donde esté el archivo de distribución .tar y posteriormente ejecutar el comando por consola pip3 de la siguiente manera:


pip3 install vehiculos-1.0.tar.gz


El instalador ejecutara diferentes procesos y se mostrará por pantalla la siguiente información:


Processing e:\documentos\desarrollos\python\curso-python\.vs\curso python\dist\vehiculos-1.0.tar.gz

Preparing metadata (setup.py) ... done

Installing collected packages: vehiculos

Running setup.py install for vehiculos ... done

Successfully installed vehiculos-1.0

7.- Una vez terminado el proceso de instalación podemos ejecutar los archivos .py del paquete sin importar donde esté ubicado y siempre encontrará las referencias a los módulos que lo componen.

8.- Para desinstalar el paquete basta con ejecutar el comando pip3 uninstall vehiculos, Python mostrará la siguiente información y solicitará una confirmación de seguridad a través de el ingreso del caracter "y" o "n":

Found existing installation: vehiculos 1.0

Uninstalling vehiculos-1.0:

  Would remove:

    c:\users\césar\appdata\local\programs\python\python311\lib\site-packages\modulos\*

    c:\users\césar\appdata\local\programs\python\python311\lib\site-packages\vehiculos-1.0-py3.11.egg-info

Proceed (Y/n)? y

9.- Una vez terminado el proceso de desinstalación aparecerá el siguiente mensaje por pantalla:

Successfully uninstalled vehiculos-1.0

Si ahora intentamos ejecutar con el comando Python <nombre del archivo.py> fuera de su carpeta original, obtendremos un mensaje de error como el que sigue:

Traceback (most recent call last):

  File "E:\Escritorio\principal.py", line 2, in <module>

    from modulos.vehiculos import *

ModuleNotFoundError: No module named 'modulos'

Esto confirma que efectivamente el paquete se ha desinstalado por que ya no encuentra los módulos que conforman el paquete desde fuera de la carpeta del proyecto.

Comentarios

Entradas populares