Introducción
En este laboratorio, aprenderás cómo verificar si un módulo de Python se importa desde una ruta específica. El laboratorio se centra en comprender las rutas de los módulos y cómo Python busca módulos utilizando sys.path.
Comenzarás explorando sys.path para ver la lista de directorios que Python utiliza para encontrar módulos. Luego, crearás un módulo simple y un script principal para importarlo, aprendiendo cómo acceder al atributo __file__ de un módulo para determinar su ubicación y compararla con una ruta esperada. Esto te permitirá verificar la fuente de los módulos importados en tus proyectos de Python.
Comprender las rutas de los módulos
En este paso, aprenderás cómo Python maneja las rutas de los módulos y cómo determinar la ubicación de un archivo de módulo. Comprender las rutas de los módulos es crucial para administrar y organizar tus proyectos de Python.
Python utiliza una lista de directorios para buscar módulos cuando los importas. Esta lista se almacena en la variable sys.path. Exploremos cómo ver y entender esta ruta.
Abre el editor de VS Code en el entorno de LabEx.
Crea un nuevo archivo llamado
module_path.pyen el directorio~/project.import sys print(sys.path)Este script importa el módulo
sysy luego imprime el valor desys.path, que es una lista de rutas de directorios.Ejecuta el script utilizando el siguiente comando en la terminal:
python module_path.pyVerás una lista de rutas de directorios impresas en la terminal. Este es el orden en el que Python busca módulos. La salida se verá algo así:
['/home/labex/project', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']La primera ruta de la lista,
/home/labex/project, es el directorio de trabajo actual. Esto significa que Python buscará primero los módulos en el directorio donde estás ejecutando el script.Las otras rutas son directorios del sistema donde se instalan las bibliotecas de Python.
Ahora, creemos un módulo simple y veamos cómo Python lo encuentra. Crea un nuevo archivo llamado
my_module.pyen el directorio~/project.def my_function(): return "Hello from my_module!"Este módulo define una única función llamada
my_function.Crea otro archivo llamado
main.pyen el directorio~/project.import my_module result = my_module.my_function() print(result)Este script importa el módulo
my_moduley llama a la funciónmy_function.Ejecuta el script
main.py:python main.pyDeberías ver la siguiente salida:
Hello from my_module!Esto muestra que Python pudo encontrar e importar el módulo
my_moduleporque se encuentra en el mismo directorio que el scriptmain.py, que está ensys.path.
Acceder al atributo file
En este paso, aprenderás cómo acceder al atributo __file__ en Python. El atributo __file__ proporciona la ruta al archivo desde el cual se carga un módulo. Esto es útil para determinar la ubicación de tu código y para trabajar con rutas relativas.
Abre el editor de VS Code en el entorno de LabEx.
Modifica el archivo
my_module.pyen el directorio~/projectpara incluir el siguiente código:def my_function(): return "Hello from my_module!" print(f"The location of my_module is: {__file__}")Este script ahora imprime el valor del atributo
__file__.Vuelve a ejecutar el script
main.py:python main.pyDeberías ver una salida similar a la siguiente:
The location of my_module is: /home/labex/project/my_module.py Hello from my_module!La primera línea muestra la ruta absoluta al archivo
my_module.py. Este es el valor del atributo__file__.Nota: El atributo
__file__puede mostrar una ruta relativa o no estar disponible en algunos casos, como cuando el módulo es parte de un archivo zip o cuando se ejecuta directamente en el intérprete interactivo.Creemos otro módulo en un subdirectorio para explorar más
__file__. Crea un nuevo directorio llamadoutilsdentro del directorio~/project:mkdir ~/project/utilsCrea un nuevo archivo llamado
helper.pydentro del directorio~/project/utils:def helper_function(): return "Hello from helper!" print(f"The location of helper is: {__file__}")Modifica el archivo
main.pypara importar y usar el módulohelper.py:import my_module from utils import helper result_my_module = my_module.my_function() print(result_my_module) result_helper = helper.helper_function() print(result_helper)Ejecuta el script
main.py:python main.pyDeberías ver una salida similar a la siguiente:
The location of my_module is: /home/labex/project/my_module.py Hello from my_module! The location of helper is: /home/labex/project/utils/helper.py Hello from helper!Esto demuestra cómo
__file__proporciona la ruta a cada módulo, independientemente de su ubicación dentro de la estructura del proyecto.
Comparar con la ruta esperada
En este paso, aprenderás cómo comparar el atributo __file__ con una ruta esperada para asegurarte de que tu script se está ejecutando desde la ubicación correcta. Esto es útil para validar tu entorno y prevenir errores causados por rutas de archivos incorrectas.
Abre el editor de VS Code en el entorno de LabEx.
Modifica el archivo
my_module.pyen el directorio~/projectpara incluir una comparación con una ruta esperada:import os def my_function(): return "Hello from my_module!" expected_path = os.path.abspath(__file__) current_path = os.path.abspath("/home/labex/project/my_module.py") if expected_path == current_path: print("The script is running from the expected location.") else: print(f"The script is running from an unexpected location: {__file__}") print(f"Expected location: {current_path}") print(f"The location of my_module is: {__file__}")Este script ahora compara la ruta absoluta de
__file__con la ruta absoluta esperada/home/labex/project/my_module.py.Usamos
os.path.abspath()para asegurarnos de que ambas rutas son absolutas, lo que hace la comparación más confiable.Vuelve a ejecutar el script
main.py:python main.pyDeberías ver una salida similar a la siguiente:
The script is running from the expected location. The location of my_module is: /home/labex/project/my_module.py Hello from my_module! The location of helper is: /home/labex/project/utils/helper.py Hello from helper!Si el script se está ejecutando desde la ubicación esperada, imprimirá "The script is running from the expected location." De lo contrario, imprimirá la ubicación actual y la ubicación esperada.
Para probar el escenario de "ubicación inesperada", puedes mover temporalmente el archivo
my_module.pya un directorio diferente y ejecutarmain.pyde nuevo. Sin embargo, para los fines de este laboratorio, asumiremos que el archivo está en la ubicación correcta.Importante: En un escenario del mundo real, usarías esta técnica para validar que tu script se está ejecutando en el entorno correcto y para manejar casos en los que el script se está ejecutando desde una ubicación inesperada.
Resumen
En este laboratorio, aprendiste cómo Python maneja las rutas de los módulos y cómo determinar la ubicación de un archivo de módulo. Exploraste la variable sys.path, que contiene una lista de directorios en los que Python busca cuando importa módulos. Creaste un script para imprimir sys.path y observaste el orden en el que Python busca módulos, comenzando por el directorio de trabajo actual.
Además, creaste un módulo simple llamado my_module.py e importaste en main.py. Esto demostró cómo Python localiza e importa módulos dentro de las rutas de búsqueda definidas.



