Cómo Python encuentra sus módulos
Estrictamente tomado, un módulo es un solo archivo de Python, mientras que un paquete es una carpeta que contiene archivos de Python, acompañado de un archivo (puede estar vacío) llamado __init__.py
, para decirle a Python que es un paquete desde el cual importar módulos. En ambos casos, los módulos necesitan su .py
extensión, pero la importación se realiza sin (ver más abajo).
Por defecto, Python busca sus módulos y paquetes en $PYTHONPATH
.
Para averiguar qué se incluye en $ PYTHONPATH, ejecute el siguiente código en python (3):
import sys
print(sys.path)
Cómo agregar un directorio
De vez en cuando
Desde un archivo de Python, puede agregar rutas de acceso ocasionalmente a la ruta predeterminada agregando las siguientes líneas en la sección de encabezado de su aplicación o script de Python:
import sys
sys.path.insert(0, "/path/to/your/package_or_module")
Por ejemplo:
si tengo una carpeta: /home/myname/pythonfiles
y quiero importar el archivo module_1.py
, ubicado en ese directorio, lo agrego a la sección de encabezado de mi código:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
Y simplemente puedo importar el archivo module_1.py
:
import module_1
Cuando creo un paquete y quiero importar módulos desde el paquete, necesito crear una carpeta que $PYTHONPATH
contenga los módulos, acompañada de un archivo (puede estar vacío) llamado__init__.py
Por ejemplo:
Para importar desde un paquete (carpeta) llamada my_package
en /home/myname/pythonfiles
, añadir la /home/myname/pythonfiles
ruta a su $PYTHONPATH
, al igual que en el ejemplo 1, e importar el módulo llamado module_2.py
(dentro de la carpeta del paquete) simplemente con: `
from <packagename> import module_2
Agregar directorios a $PYTHONPATH
permanentemente:
Agregue la siguiente línea a su ~/.profile
archivo.
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
Subdirectorios
Desde dentro de un paquete, los subdirectorios no se incluyen así; necesita "encadenar" los directorios. Para importar un módulo module_3.py
, dentro de la carpeta subfolder
dentro de la carpeta packagename
:
import packagename.subfolder.module_3
Dado el hecho de que todas las subcarpetas en el paquete incluyen su propio __init__.py
archivo.
Cuando un módulo está en el mismo directorio que el script o la aplicación
No es necesario insertar la ruta a un módulo cuando está en el mismo directorio que el script o la aplicación, se agrega automáticamente.
Ejemplo:
Si tengo una carpeta que contiene script.py
y module.py
, simplemente puedo importar el módulo de la siguiente manera:
import module
__init__.py
archivo en tu carpeta? así es como python crea paquetes y le permite importar módulos desde ese paquete. guide.python-distribute.org/creation.html