Python >> Tutoriel Python >  >> Python

Comment importer un module étant donné le chemin complet

Résumé : Pour importer un module avec le chemin complet, les méthodes suivantes peuvent être utilisées :

  • Utiliser le importlib modules
  • Utiliser SourceFileLoader classe
  • Utiliser sys.path.append() fonction
  • Ajouter le fichier __init__ au dossier contenant le module puis l'importer

Problème : Comment importer un module si son chemin complet a été donné ?

Exemple : Considérons que nous avons l'arrangement de fichiers suivant :

python
     |--main.py
     |calculator
        |-----add.py         

Compte tenu de l'environnement de projet ci-dessus, nous souhaitons importer le module d'ajout du package de la calculatrice dans notre main.py class afin d'obtenir le résultat souhaité. Le module ajouté contient une fonction nommée add() qui renvoie la somme de deux nombres. Par conséquent, dans cet exemple, nous visons à importer le module d'ajout et à obtenir la somme des deux nombres.

<Code to import the add module from the calculator package>

x = int(input("first no."))
y = int(input("second no."))
r = add(x, y)
print("Sum: ", r)

Résultat souhaité :

first no. 89
second no. 99
Sum:  188

Examinons les différentes méthodes qui peuvent être utilisées pour importer le module d'ajout à partir de son chemin donné.

Solution :

Méthode 1 :Utilisation du module importlib

Le importlib module en Python a deux objectifs :

  1. Il fournit une implémentation du import déclaration.
  2. Il expose les composants du import responsable du fonctionnement du import déclaration. Cela permet aux utilisateurs de créer leurs objets personnalisés et de jouer avec eux pour utiliser le processus d'importation en fonction de leurs besoins.

Par conséquent, nous pouvons tirer parti de la puissance du importlib module dans notre code pour importer des packages personnalisés à partir d'un chemin donné.

Jetez un oeil au programme suivant qui montre l'utilisation du importlib module pour importer des packages (veuillez suivre les commentaires pour mieux comprendre le code fourni) :

import importlib.util

# function to specify the module that needs to be imported relative to the package and path of the module
spec = importlib.util.spec_from_file_location("add", "C:\\Users\\Shubham-PC\\PycharmProjects\\pythonProject1"
                                                     "\\calculator\\add.py")

# creating a new module based on spec
foo = importlib.util.module_from_spec(spec)

# exec_module :- An abstract method that executes the module in its own namespace when a module is imported or reloaded.
spec.loader.exec_module(foo)

# Program to use the imported add module
x = int(input("first no."))
y = int(input("second no."))
r = foo.add(x, y)
print("Sum: ", r)

Sortie :

first no. 89
second no. 99
Sum:  188

Avis de non-responsabilité :la méthode ci-dessus fonctionnera pour Python 3.5 et versions ultérieures

Méthode 2 :Utilisation de la classe SourceFileLoader

Si vous utilisez Python 3.3 ou supérieur, vous pourriez être fasciné d'utiliser le SourceFileLoader classer. Il s'agit d'une classe de base abstraite utilisée pour implémenter le chargement du fichier source.

Examinons le code suivant pour comprendre l'utilisation de SourceFileLoader class pour importer des packages depuis un chemin donné (Merci de suivre les commentaires dans le code pour une meilleure prise en main) :

from importlib.machinery import SourceFileLoader

# importing the add module from the calculator package using the path
foo = SourceFileLoader("add",
                       "C:\\Users\\Shubham-PC\\PycharmProjects\\pythonProject1\\calculator\\add.py").load_module()

# code to use the imported add module of the calculator package
x = int(input("first no."))
y = int(input("second no."))
r = foo.add(x, y)
print("Sum: ", r)

Sortie

first no. 89
second no. 99
Sum:  188

Méthode 3 :Utilisation de la fonction sys.path.append()

Pour importer le module dans votre code Python, vous pouvez utiliser le sys.path.append() fonction pour ajouter le répertoire du module requis à la variable d'environnement. La liste des répertoires que Python recherche pour les modules et fichiers requis est stockée dans le path attribut du sys module. Maintenant path est une liste et nous pouvons utiliser la méthode append pour ajouter de nouveaux répertoires.

Le programme suivant illustre le concept ci-dessus :

import sys
sys.path.append("C:\\Users\\Shubham-PC\\PycharmProjects\\pythonProject1\\calculator")
import add
x = int(input("first no."))
y = int(input("second no."))
r= add.add(x,y)
print("Sum: ",r)

Sortie :

first no. 89
second no. 99
Sum:  188

Méthode 4 :Création du package avec le fichier __init__

Considérant que le package à importer se trouve dans le même dossier racine que la classe qui importera un module du package, il existe un autre moyen d'importer le module dans notre code. Pour importer le module, vous devez vous assurer que le dossier contenant le module contient un fichier nommé __init__ ajouté. Ce fichier est généralement vide. Importez ensuite le module dans votre code en tant que from <package_name>.<filename> import <module_name>

Examinons le code suivant pour savoir comment cela fonctionne :

from calculator.add import add

x = int(input("first no."))
y = int(input("second no."))
r = add(x, y)
print("Sum: ", r)

Sortie :

first no. 89
second no. 99
Sum:  188

Attention :Le dossier racine de la classe important le module et le répertoire qui contient le module avec le __init__ fichier, doit être le même. En d'autres termes, les deux doivent se trouver dans le dossier racine du projet.

Importations relatives vs absolues en Python

Avant de conclure cet article, nous devons comprendre la différence subtile entre une importation relative et une importation absolue en python.

Chemin absolu Chemin relatif
Importer en utilisant le chemin complet. (Par exemple, du dossier racine des projets au module souhaité.) Importation relative à l'emplacement courant par rapport à l'emplacement du module à importer. Les importations relatives utilisent la notation par points.
L'importation absolue restera valide même si l'emplacement de l'instruction d'importation change. L'importation relative ne fonctionnera pas si l'emplacement de l'instruction d'importation change.
Exemple :en considérant la même disposition de répertoires que celle donnée au début de l'article.

à partir de la calculatrice importer ajouter

x =int(input("first no."))
y =int(input("second no."))
r =ajouter(x, y)
print("Somme :", r)
Exemple :en considérant la même disposition de répertoires que celle donnée au début de l'article.


à partir de la calculatrice importer ajouter

x =int(input("first no."))
y =int(input("second no."))
r =add.add(x, y)
print("Somme :", r)

Conclusion

Ainsi, à partir de la discussion ci-dessus, nous pouvons conclure que pour importer un module avec le chemin complet, les méthodes suivantes peuvent être utilisées :

  1. Utiliser le importlib module
  2. Utiliser SourceFileLoader classe
  3. Utiliser sys.path.append() fonction
  4. Ajout de __init__ fichier dans le dossier contenant le module, puis importation il

Plus tard, nous avons également discuté des principales différences entre les importations relatives et absolues.

J'espère que cet article vous a été utile et que vous avez réussi à en tirer quelque chose. Veuillez rester à l'écoute pour plus de choses intéressantes !