Python: Paquetes
Un paquete (Package) es una carpeta conteniendo módulos y/u otros paquetes que a su vez pueden contender módulos y/u otros paquetes. La estructura básica de un paquete es:
padre/
__init__.py
modulo1.py
uno/
__init__.py
modulo3.py
dos/
__init__.py
tres/
__init__.py
Aquí tenemos un paquete llamada padre que contiene un módulo llamada modulo1 y tres paquetes hijos llamados uno, dos y tres, que además el paquete uno tiene un módulo llamado módulo3.
Por defecto cuando utilizamos un paquete éste debe estar en el mismo directorio que el programa que lo llama o en un directorio que contenta sys.path o si no podemos distribuir el paquete (ver distribución de paquetes).
Para poder usar las funciones y/o clases de los módulos contenidos en un paquete en nuestro programa debemos importarlo import de las siguiente manera:
# paquete:
# nuestro_paquete/
# __ini__.py <-- fichero vacío
# nuestro_modulo.py
# fichero: nuestro_modulo.py
def nuestra_funcion():
print("Hola Mundo")
# fichero: nuestro_programa.py
from nuestro_paquete.nuestro_modulo import nuestra_funcion
nuestra_funcion()
# ejecutamos
python3 nuestro_programa.py
Hola Mundo
Para distribuir un paquete y hacerlo instalable debemos crear un fichero llamado setup.py fuera de la carpeta del paquete (en el ejemplo de arriba fuera de padre/) para que estén al mismo nivel.
Este fichero debe contener la siguiente información (de momento la básica):
from setuptools import setup
setup(
name="padre",
version="0.1",
description="Este es un paquete de ejemplo",
author="Iñaki Martínez",
author_email="mi@correo.es",
url="http://www.imd.guru",
packages=["padre","padre.uno","padre.dos","padre.tres"],
scripts=[]
)
Aunque la mayoría de las líneas son auto explicativas, lo que es muy importante es packages que es una lista que primero debe ser el nombre del paquete y después cada uno de los subpaquetes que están incluidos.
Una vez que tengamos la carpeta del paquete y el fichero setup.py, nos situamos en un terminal en el mismo directorio y ejecutamos:
python setup.py sdist
Si todo ha funcionado correctamente, se habrá creado una nueva carpeta llamada dist con un fichero (.zip o .tar.gz dependiendo el S.O.) que es nuestro fichero distribuible y que es el que podemos compartir con todo el mundo para que puedan instalar nuestro paquete.
Para instalar un paquete en Python desde el directorio donde tenemos el paquete comprimido:
pip install padre-0.1.zip
Para desinstalar el paquete en Python:
pip uninstall padre
Más información en: paquetes