Tutoriales

Usando Sys.path.append() en Python

Sys.path es una lista de directorios donde el intérprete de Python busca módulos. Eso sí, ¡eso es una lista! Cuando se reclama un módulo en un archivo de proyecto, busca en todos los directorios de la lista. Si el módulo está en uno de estos directorios, entonces todo está bien y su proyecto se procesará correctamente. Sin embargo, si el módulo no está en ninguno de los directorios enumerados, su proyecto fallará, por lo que no puede «agregar» el directorio en el que se encuentra su módulo a la lista usando la función append(). En este tutorial, aprenderemos a usar sys.path.append() en Python.

Listar la ruta actual

Al declarar lo siguiente, podemos verificar la ruta actual de Python:

importar sistema

desde prensa importar prensa

prensa(sistema.fuera)

Aquí, el módulo pprint solo se usa para hacer que las cosas se vean bien, por lo que puede ignorar esa parte y concentrarse en el resto. Todo lo que intentamos hacer aquí es imprimir sys.path.

Esto es lo que obtenemos:

En primer lugar, lo que nota aquí es que es una lista. De acuerdo con la lista, primero se busca en el directorio de trabajo actual, luego en otros directorios uno por uno. El directorio de trabajo actual es el directorio donde reside el script principal de Python, actualmente en ejecución. Además, también significa que esta lista se puede cambiar o editar.

Agregar una ruta

El método sys.path.append() se usa específicamente para agregar una ruta a las existentes.

Supongamos que tengo dos archivos diferentes: main.py y file1.py. Main.py es el archivo principal e intentaremos importar file1.py (un módulo que escribimos).

principal.py archivo1.py
importar archivo1

prensa(archivo1.secreto)

secreto = «Ese es la frase secreta»

Dado que file1.py o nuestro módulo están en el directorio de trabajo, debería poder imprimir con éxito el conjunto secreto. Esto se debe a que cuando el intérprete de Python busca el módulo solicitado, primero busca en el directorio de trabajo, y dado que nuestro módulo llamado file1 está en el directorio de trabajo, automáticamente imprime nuestro conjunto secreto.

Supongamos que creo un directorio llamado «directorio1» en mi directorio de trabajo y coloco mi módulo llamado archivo1 en él.

Bueno, dentro del módulo file1 está la oración secreta que estamos tratando de imprimir. En este caso, la frase secreta no se imprimirá. ¿Por qué? Porque el intérprete no busca módulos en el directorio1. En otras palabras, el directorio de trabajo actual es miembro de la lista sys.path, pero el directorio 1 no es miembro de esa lista. Entonces, el error resultante es un error ModuleNotFound: no pudo encontrar o ubicar el módulo llamado file1.

Para solucionar este problema, debe decirle al intérprete de Python dónde buscar el módulo file1. Aquí es donde entra en juego el método sys.path.append().

El método sys.path.append() se usa para agregar la ruta deseada a la lista existente.

En un sistema Linux:

sistema.fuera.adjuntar(«/Manera de/para ti)

En un sistema Windows escribirías:

sistema.fuera.adjuntar(«C:\\ruta\\a\\para ti)

Tenga en cuenta que no puede agregar un archivo específico a sys.path, sino que puede agregar directorios y luego importar los archivos que desee.

Ejemplo 1

Así que intentemos la operación anterior de nuevo (donde el módulo archivo1 está en el directorio1), pero esta vez agregamos la ruta al módulo archivo1 a sys.path usando el método sys.path.append().

principal.py archivo1.py
importar sistema

sistema.fuera.adjuntar(‘C:\\Usuarios\\nunca\\PycharmProjects\\

pythonProyecto1\\directorio1′)

importar archivo1

prensa(archivo1.secreto)

secreto = «Ese es la frase secreta»

Cuando agregamos la ruta usando el método sys.path.append(), primero agregamos la ubicación del módulo a Path y luego lo importamos. De esta forma, el intérprete de Python debería poder encontrar el módulo solicitado y, por lo tanto, recuperar la variable secreta.

El resultado de la operación anterior es el siguiente:

Ejemplo #2

Tomemos otro ejemplo, esta vez en una máquina Linux. Digamos que tenemos un archivo: main.py.

principal.py
importar sistema

desde prensa importar prensa

prensa(sistema.fuera)

Aquí, sys.ruta[0] es «/home/kalyani» porque ahí es donde se encuentra main.py.

Ahora modifiquemos un poco el script usando el método sys.path.append(). Usemos el método para agregar una ruta específica (‘/home/kalyani/directory1’) a sys.path.

principal.py
importar sistema

desde prensa importar prensa

sistema.fuera.adjuntar(‘/inicio/kalyani/directorio1’)

prensa(sistema.fuera)

¡Entonces el método sys.path.append() agregó la ruta al final de la lista existente! Nuevamente, tenga en cuenta que la adición se realiza al final de la lista y no al principio.

RUTA DE PITÓN

Hay un pequeño problema con lo que acabamos de hacer, y es que no agregamos permanentemente esa ubicación a la lista sys.path. El método sys.path.append() se usa para agregar una ruta temporalmente y, como tal, esta ruta sería válida para una sesión, por ejemplo. Si queremos cambiar permanentemente la lista sys.path, podemos usar PYTHONPATH para agregar la ruta a la lista. Dado que sys.path también busca en PYTHONPATH, las ubicaciones enumeradas se incluyen en la lista de rutas.

En Linux:

exportar PYTHONPATH=‘/Manera de/para ti

  1. En su máquina Linux, abra una terminal y navegue hasta la carpeta que contiene .bashrc.
  2. nano .bashrc
  3. Agregue lo siguiente al final del archivo .bashrc:

    exportar PYTHONPATH=‘/inicio/kalyani/directorio1’

Aquí puede agregar la ruta deseada.

  1. Cierra la terminal y abre una nueva terminal
  2. Ahora intente ejecutar su programa. En mi caso será:
principal.py
importar sistema

desde prensa importar prensa

prensa(sistema.fuera)

Eventualmente, cuando escribimos programas complejos en Python, agregaremos módulos de terceros o, mejor aún, crearemos nuestros propios módulos. En todos los casos, no podemos mantener todos los archivos de Python que creamos en un directorio, es posible que deseemos usar varios directorios para clasificar nuestros archivos de manera adecuada. Sin embargo, el problema es que es posible que necesitemos importar nuestros módulos creados de izquierda a derecha. Si queremos evitar un error de ModuleNotFound en tales casos, podemos agregar la ubicación del directorio (y tenga en cuenta que debe ser un directorio, no un archivo) a sys.path usando el método sys.path.append().

¡Feliz codificación!

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba