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:
3.- Luego se deben especificar algunos datos relacionados a la distribución del paquete:
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
Publicar un comentario