Ver índice de contenidos del libro

3.1. Creando módulos empaquetados

En Python, cada uno de nuestros archivos .py se denominan módulos. Estos módulos, a la vez, pueden formar parte de paquetes. Un paquete, es una carpeta que contiene archivos .py. Pero, para que una carpeta pueda ser considerada un paquete, debe contener un archivo de inicio llamado __init__.py. Este archivo, no necesita contener ninguna instrucción. De hecho, puede estar completamente vacío.

└── paquete 
    ├── __init__.py 
    ├── modulo1.py 
    ├── modulo2.py 
    └── modulo3.py

Los paquetes, a la vez, también pueden contener otros sub-paquetes:

. 
└── paquete 
    ├── __init__.py 
    ├── modulo1.py 
    └── subpaquete 
        ├── __init__.py 
        ├── modulo1.py 
        └── modulo2.py

Y los módulos, no necesariamente, deben pertenecer a un paquete:

. 
├── modulo1.py 
└── paquete 
    ├── __init__.py 
    ├── modulo1.py 
    └── subpaquete 
        ├── __init__.py 
        ├── modulo1.py 
        └── modulo2.py

3.1.1. Importando módulos enteros

El contenido de cada módulo, podrá ser utilizado a la vez, por otros módulos. Para ello, es necesario importar los módulos que se quieran utilizar. Para importar un módulo, se utiliza la instrucción import, seguida del nombre del paquete (si aplica) más el nombre del módulo (sin el .py) que se desee importar.

# -*- coding: utf-8 *-* 
 
import modulo          # importar un módulo que no pertenece a un paquete 
import paquete.modulo1 # importar un módulo que está dentro de un paquete
import paquete.subpaquete.modulo1

La instrucción `import seguida de nombre_del_paquete.nombre_del_modulo, nos permitirá hacer uso de todo el código que dicho módulo contenga.

Nota Python tiene sus propios módulos, los cuales forman parte de su librería de módulos estándar, que también pueden ser importados.

3.1.2. Namespaces

Para acceder (desde el módulo donde se realizó la importación), a cualquier elemento del módulo importado, se realiza mediante el namespace, seguido de un punto (.) y el nombre del elemento que se desee obtener. En Python, un namespace, es el nombre que se ha indicado luego de la palabra import, es decir la ruta (namespace) del módulo:

print modulo.CONSTANTE_1
print paquete.modulo1.CONSTANTE_1
print paquete.subpaquete.modulo1.CONSTANTE_1

3.1.2.1. Alias

Es posible también, abreviar los namespaces mediante un alias. Para ello, durante la importación, se asigna la palabra clave as seguida del alias con el cuál nos referiremos en el futuro a ese namespace importado:

import modulo as m
import paquete.modulo1 as pm
import paquete.subpaquete.modulo1 as psm

Luego, para acceder a cualquier elemento de los módulos importados, el namespace utilizado será el alias indicado durante la importación:

print m.CONSTANTE _1
print pm.CONSTANTE _1
print psm.CONSTANTE_1

3.1.2.2. Importar módulos sin utilizar namespaces

En Python, es posible también, importar de un módulo solo los elementos que se desee utilizar. Para ello se utiliza la instrucción from seguida del namespace, más la instrucción import seguida del elemento que se desee importar:

from paquete.modulo1 import CONSTANTE_1

En este caso, se accederá directamente al elemento, sin recurrir a su namespace:

print CONSTANTE_1

Es posible también, importar más de un elemento en la misma instrucción. Para ello, cada elemento irá separado por una coma (,) y un espacio en blanco:

from paquete.modulo1 import CONSTANTE_1, CONSTANTE_2

Pero ¿qué sucede si los elementos importados desde módulos diferentes tienen los mismos nombres? En estos casos, habrá que prevenir fallos, utilizando alias para los elementos:

from paquete.modulo1 import CONSTANTE_1 as C1, CONSTANTE_2 as C2 
from paquete.subpaquete.modulo1 import CONSTANTE_1 as CS1, CONSTANTE_2 as CS2 
 
print C1
print C2
print CS1
print CS2

De forma alternativa (pero muy poco recomendada), también es posible importar todos los elementos de un módulo, sin utilizar su namespace pero tampoco alias. Es decir, que todos los elementos importados se accederá con su nombre original:

from paquete.modulo1 import *
 
print CONSTANTE_1
print CONSTANTE_2

Nota Abrir una terminal e iniciar el shell interactivo (intérprete) de Python. A continuación, importar el módulo this:

import this

Copyright (c) 2011-2013 Eugenia Bahit. La copia y redistribución de esta página se permite bajo los términos de la licencia Creative Commons Atribución NoComercial SinDerivadas 3.0 Unported siempre que se conserve esta nota de copyright.