Mientras trabajamos en proyectos grandes, podemos enfrentarnos a una situación en la que queremos importar un módulo desde un directorio diferente. Pero por alguna razón, es posible que el módulo no se importe correctamente. Ahora no se preocupe si su módulo no se importa correctamente. En este artículo, discutiremos formas de importar un módulo desde otro directorio.
Nota: un módulo es solo un programa de Python que termina con la extensión .py y una carpeta que contiene un módulo se convierte en un paquete.
Estructura de directorios
- Folder_1 - main.py - Folder_2 - module1.py
Supongamos que, para importar cómo importar un archivo en Python , tenemos dos carpetas diferentes, una contiene main.py, que es nuestro archivo principal de Python donde queremos importar el módulo 1 de la Carpeta_2.
Módulo1: contiene dos funciones llamadas add y odd_even. La función add tomará dos argumentos y devolverá la suma de ellos. La función par_impar tomará solo un argumento e imprimirá Incluso si el número es par o imprimirá Impar si el número es impar.
módulo1.py
Python3
# creating a simple add function def add(a, b): return a+b # creating a simple odd_even function # to check if the number is odd or even def odd_even(n): if n % 2 == 0: print("Even") else: print("Odd")
Si simplemente intentamos importar el módulo 1 desde la Carpeta_2 , nos encontraremos con el siguiente error.
principal.py
Python3
# importing module1 from another folder import Folder_2 # calling odd_even function module1.odd_even(5)
Producción:
ModuleNotFoundError , porque, de forma predeterminada, el intérprete de Python buscará el archivo solo en el directorio actual, y debemos configurar la ruta del archivo manualmente para importar los módulos desde otro directorio. Podemos hacer esto usando varias maneras. Estas formas se discuten a continuación en detalle.
Método 1: importar el módulo desde un directorio diferente usando el módulo sys
Podemos usar sys.path para agregar la ruta de la nueva carpeta diferente (la carpeta desde donde queremos importar los módulos) a la ruta del sistema para que Python también pueda buscar el módulo en ese directorio si no encuentra el módulo en su directorio actual. Como sys.path cae dentro de la clase de tipo de lista , podemos usar fácilmente el método de inserción para agregar la ruta de la carpeta.
Python3
# importing sys import sys # adding Folder_2 to the system path sys.path.insert(0, '/home/amninder/Desktop/Folder_2') # importing the add and odd_even # function from module1 import odd_even, add # calling odd_even function odd_even(5) # calling add function print("Addition of two number is :", add(2, 2))
Salida :
Método 2: usar la variable de entorno PYTHONPATH
Del mismo modo, si no desea utilizar el módulo sys para establecer la ruta del nuevo directorio. Puede asignar una ruta de directorio a la variable PYTHONPATH y aún así hacer que su programa funcione.
En Linux , podemos usar el siguiente comando en la terminal para establecer la ruta:
export PYTHONPATH=’ruta/al/directorio’
En el sistema Windows:
SET PYTHONPATH=”ruta/al/directorio”
Para ver si la variable PYTHONPATH contiene la ruta de la nueva carpeta, podemos usar el siguiente comando:
echo $PYTHONPATH
Python3
# importing the add and odd_even function from module1 import odd_even, add # calling odd_even function odd_even(5) # calling add function print("Addition of two number is :", add(2, 2))
Producción:
Supongamos que tenemos una estructura de directorios como esta:
- project - Folder_1 - main.py - Folder_2 - subfolder - new.py
Ahora, desea importar el módulo new.py de Folder_2 al archivo main.py de Folder_1 de nuestro proyecto .
Sintaxis:
from project.folder.subfolder.filename importar nombre de función
Python3
# importing sys import sys # adding Folder_2/subfolder to the system path sys.path.insert(0, '/home/amninder/Desktop/project/Folder_2/subfolder') # importing the hello from new import hello # calling hello function hello()
Producción:
Publicación traducida automáticamente
Artículo escrito por amnindersingh1414 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA