Modificando el Python Path Permanentemente con PYTHONPATH
Si bien modificar sys.path dentro de un script es útil para cambios temporales, es posible que desees agregar un directorio al Python path para todas tus sesiones de Python o para un proyecto específico sin modificar scripts individuales. Esto se puede lograr configurando la variable de entorno PYTHONPATH.
La variable de entorno PYTHONPATH es una lista de directorios que Python agrega a sys.path cuando se inicia.
Para configurar la variable de entorno PYTHONPATH para tu sesión de terminal actual, puedes usar el comando export.
Eliminemos la línea sys.path.append() de use_custom_module.py y usemos PYTHONPATH en su lugar.
Abre use_custom_module.py en el editor WebIDE y elimina las siguientes líneas:
## Get the absolute path to the custom modules directory
custom_modules_path = os.path.join(os.path.dirname(__file__), 'my_custom_modules')
## Add the custom modules directory to sys.path
sys.path.append(custom_modules_path)
El archivo use_custom_module.py ahora debería verse así:
import sys
import os
## Now you can import my_module
import my_module
message = my_module.greet("LabEx User")
print(message)
## Optional: Print sys.path again to see the added directory
print("\nUpdated sys.path:")
print(sys.path)
Guarda el archivo.
Ahora, intenta ejecutar el script sin configurar PYTHONPATH:
python use_custom_module.py
Es probable que obtengas un ModuleNotFoundError porque Python no puede encontrar my_module.
Traceback (most recent call last):
File "/home/labex/project/use_custom_module.py", line 5, in <module>
import my_module
ModuleNotFoundError: No module named 'my_module'
Ahora, configuremos la variable de entorno PYTHONPATH en la terminal para incluir nuestro directorio de módulos personalizados. Asegúrate de estar en el directorio /home/labex/project.
export PYTHONPATH="/home/labex/project/my_custom_modules:$PYTHONPATH"
Este comando agrega /home/labex/project/my_custom_modules al principio de la variable PYTHONPATH. El $PYTHONPATH al final asegura que cualquier directorio existente en PYTHONPATH se conserve.
Ahora, ejecuta el script use_custom_module.py nuevamente en la misma sesión de terminal:
python use_custom_module.py
Deberías ver la salida que indica que el módulo fue encontrado y ejecutado:
Hello, LabEx User from my_module!
Updated sys.path:
['/home/labex/project', '/home/labex/project/my_custom_modules', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/labex/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
Observa que /home/labex/project/my_custom_modules ahora está incluido en sys.path porque configuramos la variable de entorno PYTHONPATH.
Configurar PYTHONPATH en la terminal usando export solo afecta la sesión de terminal actual. Para hacer que el cambio sea permanente, normalmente agregarías el comando export al archivo de inicio de tu shell (por ejemplo, ~/.bashrc, ~/.zshrc). Sin embargo, para este lab, configurarlo en la sesión actual es suficiente para demostrar el concepto.