Python: módulo de importación desde un directorio diferente

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:

Error

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 :

usando sistema

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:

Usando PYTHONPATH

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:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *