
En Python, vous pouvez importer la bibliothèque standard, les packages installés avec pip, vos propres packages, etc., avec l’instruction import.
Cet article décrit le contenu suivant.
- Modules, packages et bibliothèques en Python
- Utilisation de base de l’importation
- Comment écrire une importation comme recommandé dans PEP8
- Fonctions d’importation, variables, classes, etc. :
from ... import ... - Importer avec un alias :
import ... as ... - Importer à partir de packages
- Erreurs courantes liées à l’importation
- ModuleNotFoundErrorModuleNotFoundError
- Erreur d’attribut
Consultez l’article suivant pour le chemin de recherche du module.
Modules, packages et bibliothèques en Python
Modules
En Python, un module est un fichier qui définit des fonctions, des classes, etc.
Paquets
Le répertoire contenant les modules et __init__.py est appelé « packages réguliers ». __init__.py peut être un fichier vide.
Dans Python 3.3 et versions ultérieures, les répertoires qui ne contiennent pas __init__.py peuvent être importés en tant que packages. De tels packages sont appelés « packages d’espace de noms ».
Bibliothèques
Bien qu’ils ne soient pas strictement définis, les packages et les modules sont parfois appelés bibliothèques.
Utilisation de base de l’importation
Par exemple, importez le module mathématique.
Avec import , un module est importé en tant qu’objet de type module. Vous pouvez vérifier quel fichier est importé avec print().
import math
print(type(math))
# <class 'module'>
print(math)
# <module 'math' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/math.cpython-37m-darwin.so'>
Vous pouvez utiliser les fonctions et les variables définies dans le module avec ., .,
print(math.radians(180))
# 3.141592653589793
print(type(math.radians))
# <class 'builtin_function_or_method'>
print(math.pi)
# 3.141592653589793
print(type(math.pi))
# <class 'float'>
Si vous souhaitez utiliser directement les fonctions ou les variables d’un module, utilisez celles décrites ci-dessous. Notez que l’importation . génère une erreur.
Comment écrire une importation comme recommandé dans PEP8
PEP8, le guide de style Python, décrit comment écrire l’instruction d’importation.
Notez qu’il ne s’agit que d’un guide de style, il n’y a donc pas d’erreur même si vous ne l’écrivez pas de cette façon.
Importer plusieurs modules
Vous pouvez écrire plusieurs modules séparés par des virgules après l’instruction d’importation, mais cela n’est pas recommandé dans PEP8. Les importations doivent généralement se faire sur des lignes distinctes.
# NG
import os, sys
# OK
import os
import sys
Si vous utilisez from pour importer des fonctions, des variables, des classes, etc., comme expliqué ci-après, vous pouvez les séparer par une virgule.
from math import pi, radians
Ordre des modules
Il est recommandé de regrouper et d’importer les modules dans l’ordre suivant, en fonction de leur type. Séparez chaque groupe par une ligne vierge.
- Bibliothèques standards
- Bibliothèques tierces
- Bibliothèques locales
Bien qu’il ne soit pas écrit en PEP8, chaque module d’un groupe est souvent trié par ordre alphabétique.
import math
import os
import sys
import Requests
import my_package1
import my_package2
Fonctions d’importation, variables, classes, etc. :from ... import ...
Vous pouvez spécifier et importer des fonctions, des variables, des classes, etc. définies dans le module avec from … import ….
Importer un seul élément
Vous pouvez importer des fonctions et ainsi de suite avec from import .
Les éléments importés peuvent être utilisés directement avec . Le module lui-même n’est pas importé. L’erreur NameError est déclenchée lorsque vous essayez d’utiliser d’autres éléments.
from math import pi
print(pi)
# 3.141592653589793
# print(math.radians(180))
# NameError: name 'math' is not defined
Importer plusieurs éléments à la fois
Vous pouvez importer plusieurs fonctions, variables, etc. à partir du même module à la fois en les écrivant en les séparant par des virgules.
from math import pi, radians
print(pi)
# 3.141592653589793
print(radians(180))
# 3.141592653589793
Si une ligne est trop longue, vous pouvez utiliser des parenthèses () pour couper la ligne.
from math import (
e,
exp
)
print(e)
# 2.718281828459045
print(exp(1))
# 2.718281828459045
Importer tous les éléments avec * (non recommandé)
Avec *, toutes les fonctions, variables, etc. définies dans le module sont importées.
from math import *
print(pi)
# 3.141592653589793
print(cos(0))
# 1.0
print(sin(0))
Si __all__ est défini dans un module, seuls les noms dans __all__ sont importés.
Notez que l’importation à l’aide de * n’est pas recommandée dans PEP8 car il n’est pas clair quel nom existe dans quel espace de noms.
Importer avec un alias :import ... as ...
Vous pouvez utiliser as pour importer avec un alias. Si un alias est donné, le nom d’origine ne peut pas être utilisé.
Exemple de donner un alias à un module :
import math as m
print(m.pi)
# 3.141592653589793
# print(math.pi)
# NameError: name 'math' is not defined
Exemple de donner un alias à une variable :
from math import pi as PI
print(PI)
# 3.141592653589793
# print(pi)
# NameError: name 'pi' is not defined
Certaines bibliothèques, telles que NumPy et pandas, ont l’habitude d’être importées avec des noms abrégés.
import numpy as np
import pandas as pd
Importer à partir de packages
Lorsque vous importez des modules à partir d’un package, vous devez faire attention à la manière de les importer, en fonction de leur structure et de __init__.py.
Fondamentalement, la documentation vous explique comment importer les fichiers, alors suivez simplement les instructions. Voici des exemples pour expliquer qu’il existe différents modèles.
en hurlant
Par exemple, importez des modules et des classes à partir de la bibliothèque standard, urllib.
Les fichiers (modules) sont stockés dans le répertoire urllib comme suit. __init__.py est vide.
urllib/
├── __init__.py
├── error.py
├── parse.py
├── request.py
├── response.py
└── robotparser.py
Si vous écrivez import urllib, vous ne pouvez pas utiliser les modules sous-jacents. Par exemple, urllib.error génère une erreur AttributeError.
import urllib
print(type(urllib))
# <class 'module'>
print(urllib)
# <module 'urllib' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/__init__.py'>
# print(urllib.error)
# AttributeError: module 'urllib' has no attribute 'error'
Vous devez importer des modules avec import ..
import urllib.error
print(urllib.error)
# <module 'urllib.error' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/error.py'>
print(urllib.error.HTTPError)
# <class 'urllib.error.HTTPError'>
Vous pouvez également écrire depuis import .
from urllib import error
print(error)
# <module 'urllib.error' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/error.py'>
print(error.HTTPError)
# <class 'urllib.error.HTTPError'>
Il est également possible de spécifier une classe définie dans le module et de l’importer.
from urllib.error import HTTPError
print(HTTPError)
# <class 'urllib.error.HTTPError'>
Notez que si le code d’initialisation n’est pas écrit dans __init__.py comme ceci, vous devez importer le module sous celui-ci.
Si vous utilisez IPython/Jupyter Notebook, vous pouvez utiliser urllib.parse simplement en important urllib. Ce comportement est causé par le processus de démarrage IPython.
collections
Comme autre exemple, introduisez des collections.
Le répertoire des collections se compose des éléments suivants.
collections/
├── __init__.py
└── abc.py
Dans les collections, des classes telles que Counter et OrderedDict sont définies dans __init__.py au lieu de stocker des fichiers de module comme urllib.
Dans ce cas, lorsque vous importez un package, vous pouvez utiliser la classe comme ..
import collections
print(collections)
# <module 'collections' from '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/collections/__init__.py'>
print(collections.Counter)
# <class 'collections.Counter'>
Vous ne pouvez pas importer de classes avec ..
# import collections.Counter
# ModuleNotFoundError: No module named 'collections.Counter'
Vous pouvez importer des classes avec from.
from collections import Counter
print(Counter)
# <class 'collections.Counter'>
NumPy
Exemple de bibliothèque tierce, NumPy :
Dans NumPy, chaque sous-package est importé dans __init__.py dans le répertoire numpy.
Vous n’avez pas besoin d’importer chaque module. Écrivez simplement import numpy en tant que np pour utiliser diverses fonctions.
scikit-apprendre
Le cas de scikit-learn est différent.
scikit-learn n’importe pas de sous-packages dans __init__.py dans le répertoire sklearn.
Vous devez importer les sous-packages explicitement, comme suit.
from sklearn import datasets, model_selection, svm, metrics
ModuleNotFoundErrorModuleNotFoundError
Erreur indiquant que le module est introuvable.
ModuleNotFoundError: No module named 'xxx'
Le nom du module ou le chemin de recherche du module peut être erroné.
Comme indiqué dans l’exemple de collections ci-dessus, ModuleNotFoundError est également déclenché lorsque vous essayez d’importer une classe au lieu d’un module. Utilisez from pour importer une fonction ou une classe.
Erreur d’attribut
Erreur indiquant que le module importé n’a pas l’attribut spécifié.
AttributeError: module 'xxx' has no attribute 'yyy'
Il est possible que le bon fichier ne soit pas importé.
Par exemple, lorsque vous écrivez import , la première priorité pour la recherche de module est le même répertoire que le fichier de script exécuté, donc s’il y a un fichier nommé .py dans le répertoire, ce fichier est importé.
Utilisez print() pour vérifier si le fichier est importé depuis l’emplacement prévu, et si ce n’est pas le cas, renommez ou déplacez le fichier.
