Mientras trabajamos en grandes proyectos, podemos enfrentarnos a una situación en la que queramos 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, analizaremos formas de importar un módulo desde otro directorio.
Nota: Un módulo es solo un programa Python que termina con .py extensión 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ódulo1 desde la Carpeta_2.
Módulo 1: contiene dos funciones llamadas agregar e impar_par. La función agregar tomará dos argumentos y devolverá la suma de ellos. La función impar_par tomará sólo una argumento e imprima Par si el número es par o imprima Impar si el número es impar.
module1.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 módulo 1 de Carpeta_2, nos encontraremos con el siguiente error.
main.py
Python3
# importing module1 from another folder> import> Folder_2> # calling odd_even function> module1.odd_even(>5>)> |
números abc
>
>
Producción:

Error
Error de módulo no encontrado , porque de forma predeterminada el intérprete de Python buscará el archivo en el directorio actual únicamente y necesitamos configurar la ruta del archivo manualmente para importar los módulos desde otro directorio. Podemos hacer esto de varias maneras. Estas formas se analizan a continuación en detalle.
Método 1: importar módulo desde un directorio diferente usando el módulo sys
Nosotros podemos usar ruta.sys 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 ruta.sys cae bajo el clase de tipo de lista entonces, podemos usar fácilmente el método de inserción para agregar la ruta de la carpeta.
Python3
# importing sys> from> module1>import> odd_even, add> 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> # calling odd_even function> odd_even(>5>)> # calling add function> print>(>'Addition of two number is :'>, add(>2>,>2>))> |
>
>
Producción :

Usando sistema
Método 2: usar PYTHONPATH Variable ambiental
Del mismo modo, si no desea utilizar el sistema módulo 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:
exportar 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:
eco $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 new.py módulo de Carpeta_2 a la Carpeta_1 de nuestro proyecto main.py archivo.
Sintaxis:
desde proyecto.carpeta.subcarpeta.nombre de archivo 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