HOWTO · Python
Importar una variable de otro archivo en Python
Este tutorial demuestra cómo importar variables de otro archivo en Python.
En esta página
Para usar una variable definida en otro archivo de Python, importa su módulo y luego lee la variable, o vincula el nombre directamente con from module import name. Python debe poder encontrar el módulo en su ruta de importación. En un proyecto pequeño, guarda ambos archivos en el mismo directorio y ejecuta desde el proyecto el script que realiza la importación.
Importar un nombre específico con from ... import ...
Supongamos que config.py define greeting = "Hello, World!". El archivo que realiza la importación puede usar from config import greeting y luego referirse directamente a greeting. El nombre del módulo es el nombre del archivo sin .py. Esta forma resulta práctica cuando solo necesitas unos cuantos nombres. Puedes importar varios nombres conocidos en una lista separada por comas, como from config import greeting, language.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from pathlib import Path
from tempfile import TemporaryDirectory
import sys
with TemporaryDirectory() as directory:
project = Path(directory)
(project / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
sys.path.insert(0, str(project))
from config import greeting
print(greeting)
Este ejemplo se proporciona para que lo ejecute el coordinador de ejecución; este paquete de redacción no incluye ningún resultado de ejecución.
Importar el módulo y acceder a su variable
Usa import config y luego lee config.greeting si quieres que el módulo de origen siga siendo visible en cada uso. El prefijo del módulo deja claro de dónde proviene el nombre y reduce las colisiones cuando distintos módulos definen nombres iguales. Las importaciones normales también vinculan el nombre importado cuando se ejecuta la importación; si el valor cambia después en el módulo de origen, el nombre importado por separado no se convierte en un enlace dinámico a ese valor.
Importar un módulo dinámicamente con importlib
Usa importlib cuando el nombre del módulo se elija durante la ejecución, por ejemplo, a partir de una configuración o de la elección de un usuario. Si el módulo es conocido, una importación normal es más breve y fácil de seguir. Esta es una forma dinámica autocontenida:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from pathlib import Path
from tempfile import TemporaryDirectory
import importlib
import sys
with TemporaryDirectory() as directory:
project = Path(directory)
(project / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
sys.path.insert(0, str(project))
module_name = "config"
module = importlib.import_module(module_name)
print(module.greeting)
importlib.import_module() devuelve el objeto del módulo, así que puedes acceder a la variable a través de ese objeto. El sistema de importación también debe poder encontrar el módulo.
Hacer que se pueda importar un módulo de otro directorio
Python busca en los directorios de su ruta de importación, no en archivos arbitrarios. Una estructura sencilla sería project/main.py junto a project/settings/config.py; el contexto de ejecución y la configuración del paquete determinan si se puede importar settings.config. Para un paquete normal, añade __init__.py cuando corresponda y usa el nombre del paquete, como en from settings.config import greeting. Ejecutar el programa desde otro directorio puede cambiar los lugares en los que Python busca, así que conviene usar un método uniforme para iniciar el proyecto.
Como alternativa deliberada para un script independiente, añade a sys.path el directorio que contiene el módulo antes de importarlo. Siempre que sea posible, determina ese directorio a partir de una ubicación estable, en lugar de dar por sentado que el directorio de trabajo actual es el adecuado:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from pathlib import Path
from tempfile import TemporaryDirectory
import sys
with TemporaryDirectory() as directory:
project = Path(directory)
settings_directory = project / "settings"
settings_directory.mkdir()
(settings_directory / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
sys.path.insert(0, str(settings_directory))
from config import greeting
print(greeting)
Esto añade un directorio a sys.path; no añade el archivo del módulo. En aplicaciones que se mantienen a largo plazo, las importaciones de paquetes o la instalación del paquete suelen ser más fáciles de gestionar que modificar la ruta de importación en el código de la aplicación.
Ejecutar los ejemplos y solucionar problemas
Guarda el módulo con exactamente el mismo nombre que aparece en la importación, incluidas las mayúsculas y minúsculas, y comprueba que la variable esté definida en el nivel del módulo. Si Python muestra ModuleNotFoundError, revisa el nombre del archivo, la estructura de directorios, cómo iniciaste el script y si el directorio que contiene el módulo está en la ruta de importación. Si Python muestra ImportError para un nombre, comprueba que su escritura coincida con la de un nombre definido en el módulo. Evita dar a tus archivos nombres de módulos de la biblioteca estándar, porque Python podría cargar el módulo equivocado.
Una importación directa es lo más adecuado para una dependencia fija. Elige from config import greeting para acceder de forma concisa a unos pocos nombres, o import config cuando mantener visible el espacio de nombres del módulo aporte claridad. Usa importlib cuando el nombre del módulo dependa realmente de datos disponibles durante la ejecución.