Python – Importar módulo fuera del directorio

Los módulos son simplemente un archivo python .py desde el cual podemos usar funciones, clases, variables en otro archivo. Para usar estas cosas en otro archivo, primero debemos importar ese módulo a ese archivo. Si el módulo existe en el mismo directorio que el archivo, podemos importarlo directamente usando la sintaxis import module_name. Pero si existe en un directorio diferente, no podemos importarlo directamente. En este artículo, discutiremos varias formas en que los módulos se pueden importar desde fuera del directorio.

Nuestro árbol de directorios será el siguiente:

D :\projects\base
|__main.py   
|__app:
      |__modules
           |___mod.py

Tenemos una carpeta llamada ‘base’ en D:\projects y en la carpeta base tenemos una carpeta llamada app. El directorio base contiene main.py desde el cual importaremos el módulo. La carpeta de la aplicación contiene otra carpeta denominada módulos que contiene mod.py, que es el módulo que debe importarse.

Mantendremos el código de ambos archivos lo más simple posible para una mejor explicación:

mod.py:

Python

# defining a function hello()
def hello():
   
    # printing the string 'hello geeks!'
    print('hello geeks!')

Ahora importaremos el módulo mod.py y llamaremos a su función hola en main.py usando varios métodos. 

Método 1: Usar sys.path.append()

La variable sys.path del módulo sys contiene la lista de todos los directorios en los que Python buscará un módulo para importar. Podemos llamar directamente a este método para ver los directorios que contiene. Entonces, para importar mod.py en main.py, agregaremos la ruta de mod.py en sys.path para que Python busque mod.py en sus directorios y lo encuentre para importarlo con éxito. El código para este método será:

Python

# importing the sys module
import sys        
 
# appending the directory of mod.py
# in the sys.path list
sys.path.append('D:/projects/base/app/modules')       
 
# now we can import mod
import mod   
 
# calling the hello function of mod.py
mod.hello()

Producción:

hello geeks!

Método 2: Usar sys.path.insert().

Como ya hemos comentado, sys.path contiene la lista de todos los directorios en los que se buscará el módulo. Una mejor manera es insertar el directorio del módulo en la posición 1 para que se cargue con una prioridad más alta, lo que a su vez ayuda a evitar algunos conflictos de nombres. El código de main.py para este método será:

Python

# importing the sys module
import sys       
 
# inserting the mod.py directory at
# position 1 in sys.path
sys.path.insert(1, 'D:/projects/base/app/modules')       
 
# importing the module mod.py
import mod   
 
# calling the function hello() of mod.py
mod.hello()

Producción:

hello geeks!

Método 3: Usar __init__.py

También podemos importar el módulo convirtiendo primero el directorio donde existe como paquete python . Para convertir un directorio en un paquete de python, debemos incluir un archivo __init__.py en ese directorio que se puede dejar vacío. Cuando agregamos el archivo __init__.py, le decimos a Python que el directorio es un paquete. Después de crear __init__.py, el árbol de directorios se verá así:

D :\projects\base
|__main.py 
|__app:
|      |__modules
|          |___mod.py
|          |___init__.py
|__main.py

La forma en que llamamos al módulo en la declaración de importación es que vamos de la carpeta de la aplicación al archivo mod y separamos cada variable de ruta con un ‘.’ . Ahora, para importar mod.py en main.py desde este método, el código en main.py será:

Python

# importing the module
import app.modules.mod        
 
# calling the hello function of the module
app.modules.mod.hello()

Producción:

hello geeks!

Método 4: usar la biblioteca de importación

También podemos importar un módulo desde un directorio externo usando la biblioteca de importación. Para ello primero tendremos que importar el módulo importlib.util. Luego llame al método importlib.util.spec_from_file_location() que toma 2 argumentos file_name y file_path, que devuelve un valor. Este valor se usará con el método importlib.util.module_from_spec() para importar un módulo con un nombre específico. Entonces podemos usar este nombre específico para llamar a las funciones, clases, variables del módulo.

Python

# importing the importlib.util module
import importlib.util       
 
# passing the file name and path as argument
spec = importlib.util.spec_from_file_location(
  "mod", "D:/projects/base/app/modules/mod.py")   
 
# importing the module as foo
foo = importlib.util.module_from_spec(spec)       
spec.loader.exec_module(foo)
 
# calling the hello function of mod.py
foo.hello()

Producción:

hello geeks!

Publicación traducida automáticamente

Artículo escrito por yashgupta0524 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 *