Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

Paquetes

Utilizar paquetes nos ofrece varias ventajas. En primer lugar nos permite unificar distintos m贸dulos bajo un mismo nombre de paquete, pudiendo crear jerarqu铆as de m贸dulos y subm贸dulos, o tambi茅n subpaquetes.

Por otra parte nos permiten distribuir y manejar f谩cilmente nuestro c贸digo como si fueran librer铆as instalables de Python. De esta forma se pueden utilizar como m贸dulos est谩ndar desde el int茅rprete o scripts sin cargarlos previamente.

Para crear un paquete lo que tenemos que hacer es crear un fichero especial init vac铆o en el directorio donde tengamos todos los m贸dulos que queremos agrupar. De esta forma cuando Python recorra este directorio ser谩 capaz de interpretar una jerarqu铆a de m贸dulos:

paquete/
    __init__.py
    saludos.py
    script.py

Ahora, si utilizamos un script desde el mismo directorio donde se encuentra el paquete podemos acceder a los m贸dulos, pero esta vez refiri茅ndonos al paquete y al m贸dulo, as铆 que debemos hacerlo con from import:

from paquete.saludos import Saludo

s = Saludo()

Esta jerarqu铆a se puede expandir tanto como queramos creando subpaquetes, pero siempre a帽adiendo el fichero init en cada uno de ellos:

script.py
paquete/
    __init__.py
    hola/
        __init__.py
        saludos.py
    adios/
        __init__.py
        despedidas.py

Note

def saludar():
    print("Hola, te estoy saludando desde la funci贸n saludar() " \
          "del m贸dulo saludos")

class Saludo():
    def __init__(self):
        print("Hola, te estoy saludando desde el __init__"  \
              "de la clase Saludo")
def despedir():
    print("Adi贸s, me estoy despidiendo desde la funci贸n despedir() " \
          "del m贸dulo despedidas")

class Despedida():
    def __init__(self):
        print("Adi贸s, me estoy despidiendo desde el __init__ " \
              "de la clase Despedida")

Ahora de una forma bien sencilla podemos ejecutar las funciones y m茅todos de los m贸dulos de cada subpaquete:

Note

from paquete.hola.saludos import saludar
from paquete.adios.despedidas import Despedida

saludar()
Despedida()

Como v茅is los paquetes son muy 煤tiles, pero si intentamos ejecutarlos desde un directorio distinto a donde se encuentran, pasa lo mismo que los m贸dulos y no funcionan.

驴Como podemos solucionarlo? Bueno pues esta vez si podemos hacerlo de una forma elegante, instalando el paquete dentro de Python. Para hacerlo hay que convertir nuestro paquete en un distribuible. M谩s adelante dedicar茅 un tema a hablar sobre la distribuci贸n de c贸digo, pero por ahora os dar茅 cuatro pinceladas.

Distribuci贸n

Para crear un paquete distribuible tenemos que crear un fichero setup.py fuera de la ra铆z, indicando una informaci贸n b谩sica, de la siguiente forma:

setup.py
paquete/
    __init__.py
    hola/
        __init__.py
        saludos.py
    adios/
        __init__.py
        despedidas.py

Note

from setuptools import setup
setup(
    name="paquete",
    version="0.1",
    description="Este es un paquete de jemplo",
    author="Hector Costa",
    author_email="hola@hektorprofe.com",
    url="http://www.hektorprofe.net",
    packages=['paquete','paquete.hola','paquete.adios']
    scripts=[]
)

Una vez hemos definido el distribuible con su informaci贸n b谩sica, incluyendo los paquetes y subpaquetes que lo forman, as铆 como los posibles scripts, debemos crearlo. Para hacerlo utilizaremos el siguiente comando all铆 donde tenemos el setup.py:

python setup.py sdist

Ahora, si todo ha funcionado correctamente, se habr谩 creado una nueva carpeta llamada dist, y en ella encontraremos un fichero zip en Windows o tar.gz si estamos en Linux. Este fichero es nuestro distribuible y ahora podr铆amos compartirlo con todo el mundo para que puedan instalar nuestro paquete.

Para instalar un paquete en Python, y finalmente hacer que 茅ste se pueda utilizar desde cualquier lugar lo haremos de la siguiente forma, desde el directorio donde tenemos el paquete comprimido:

pip install paquete-0.1.zip

Ahora, si utilizamos el comando pip3 list, podremos consultar todos los paquetes instalados en nuestro Python, y podremos ver tambi茅n el nuestro. Si aparece correctamente podremos utilizar nuestro paquete desde cualquier script, pues se encuentra instalado dentro de Python.

Finalmente utilizando el comando pip uninstall para desinstalarlo:

pip uninstall paquete

Bueno, esto solo era un ejemplo muy sencillo de como distribuir un paquete, pero como ya he dicho el tema dar铆a para hablar much铆simo, as铆 que me lo reservo para el final del curso. Por ahora espero que hay谩is aprendido mucho sobre los m贸dulos y los paquetes porque utilizarlos es la clave para conseguir una buena organizaci贸n de c贸digo.


脷ltima edici贸n: 2 de Octubre de 2018