
In Python können SIE mit der Import-Anweisung sterben Standardbibliothek, mit pip installierte Pakete, Ihre eigenen Pakete usw. importieren.
Dieser Artikel hat folgenden Inhalt.
- Module, Pakete und Bibliotheken in Python
- Grundlegende Verwendung des Imports
- Wie schreibt man Import wie in PEP8 empfohlen
- Funktionen, Variablen, Klassen etc. importieren:
from ... import ...
- Mit Alias importieren:
import ... as ...
- Import aus Paketen
- Häufige Fehler beim Importieren
- ModuleNotFoundError
- AttributFehler
Im following Artikel FINDEN SIE den Modulsuchpfad.
Module, Pakete und Bibliotheken in Python
Modul
In Python ist ein Modul eine Datei, die Funktionen, Klassen usw. definiert.
Pakete
Das Verzeichnis, das Modul und __init__.py enthält, WIRD „reguläre Pakete“ genannt. __init__.py kann eine leere Datei sein.
In Python 3.3 und höher können Verzeichnisse, die __init__.py nicht enthalten, als Pakete importiert werden. Solche Pakete werden „Namespace-Pakete“ genannt.
Bibliotheken
Obwohl nicht stark definiert, werden Pakete und Module manchmal Bibliotheken genannt.
Grundlegende Verwendung des Imports
Importieren Sie beispielsweise das Mathematikmodul.
Mit Import wird ein Modul als Objekt des Modultyps importiert. Welche Datei importiert WIRD, can SIE mit print() prüfen.
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'>
Sie können im Modul definierte Funktionen und Variablen mit ., .,
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'>
Wenn SIE Funktionen oder Variablen eines Moduls direkt verwenden möchten, verwenden SIE wie unten beschrieben. Beachten Sie, dass importieren . löst einen Fehler aus.
Wie schreibt man Import wie in PEP8 empfohlen
PEP8, der Styleguide für Python, genau, wie die Importanweisung geschrieben wird.
Beachten Sie, dass dies nur ein Styleguide ist, es gibt auch keinen Fehler, selbst wenn Sie es nicht so schreiben.
Importieren Sie mehrere Module
Sie können nach der Import-Anweisung mehrere durch Kommas getrennte Module schreiben, aber dies wird in PEP8 nicht empfohlen. Der Import sollte normalerweise in separaten Zeilen erfolgen.
# NG
import os, sys
# OK
import os
import sys
Wenn Sie von verwenden, um Funktionen, Variablen, Klassen usw. zu importieren, wie im Folgenden erläutert, kann SIE dies mit Einem Komma trennen.
from math import pi, radians
Reihenfolge der Module
Es wird empfohlen, die Module je nach Typ in der Reihenfolge zu gruppieren und zu importieren. Trennen Sie jede Gruppe durch eine Leerzeile.
- Standardbibliotheken
- Bibliotheken von Drittanbietern
- Lokale Bibliotheken
Obwohl es nicht in PEP8 geschrieben IST, WIRD jedes Modul in Einer Gruppe oft in alphabetischer Reihenfolge sortiert.
import math
import os
import sys
import Requests
import my_package1
import my_package2
Funktionen, Variablen, Klassen etc. importieren:from ... import ...
Mit from … import … can SIE im Modul definierte Funktionen, Variablen, Klassen etc. spezifizieren und importieren.
Importieren Sie nur ein Element
Sie können Funktionen usw. mit aus import importieren.
Importierte Artikel können direkt mit verwendet werden. Das Modul selbst wird nicht importiert. Fehler NameError wird ausgelöst, wenn Sie versuchen, andere Elemente zu verwenden.
from math import pi
print(pi)
# 3.141592653589793
# print(math.radians(180))
# NameError: name 'math' is not defined
Importieren Sie mehrere Elemente gleichzeitig
Sie können mehrere Funktionen, Variablen usw. aus demselben Modul auf einmal importieren, indem Sie sie durch Kommas getrennt schreiben.
from math import pi, radians
print(pi)
# 3.141592653589793
print(radians(180))
# 3.141592653589793
Wenn eine Zeile zu lang ist, können Sie Klammern () verwenden, um die Zeile zu unterbrechen.
from math import (
e,
exp
)
print(e)
# 2.718281828459045
print(exp(1))
# 2.718281828459045
Alle Artikel mit importieren * (nicht empfohlen)
Mit * werden alle im Modul definierten Funktionen, Variablen etc. importiert.
from math import *
print(pi)
# 3.141592653589793
print(cos(0))
# 1.0
print(sin(0))
Wenn __all__ in einem Modul definiert ist, werden nur die Namen in __all__ importiert.
Beachten Sie, dass der Import mit * in PEP8 nicht empfohlen WIRD, da unklar IST, welcher Name in welchem Namensraum existiert.
Mit Alias importieren:import ... as ...
Sie können als verwenden, um mit einem Alias zu importieren. Wenn ein Alias angegeben WIRD, kann der ursprüngliche Name nicht verwendet werden.
Beispiel für die Vergabe eines Alias an ein Modul:
import math as m
print(m.pi)
# 3.141592653589793
# print(math.pi)
# NameError: name 'math' is not defined
Beispiel für die Vergabe eines Alias an eine Variable:
from math import pi as PI
print(PI)
# 3.141592653589793
# print(pi)
# NameError: name 'pi' is not defined
Einige Bibliotheken wie NumPy und Pandas werden üblicherweise mit abgekürzten Namen importiert.
import numpy as np
import pandas as pd
Import aus Paketen
Wenn Sie Module aus einem Paket importieren, müssen Sie darauf achten, wie Sie sie importieren, abhängig von ihrer Struktur und __init__.py.
Grundsätzlich sagt IHNEN die Dokumentation, wie SIE die Dateien importieren, also folgen Sie einfach den Anweisungen. Hier sind Beispiele, um zu erklären, dass es verschiedene Muster gibt.
Urb
Importieren Sie beispielsweise Module und Klassen aus der Standardbibliothek urllib.
Dateien (Modul) werden wie folgt im Verzeichnis urllib gespeichert. __init__.py ist leer.
urllib/
├── __init__.py
├── error.py
├── parse.py
├── request.py
├── response.py
└── robotparser.py
If you import urllib write, can you sterben Module darunter Nicht verwenden. Beispiel löst urllib.error einen Fehler AttributeError aus.
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'
Sie müssen Module mit import .. importieren.
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'>
Sie können auch aus dem Import schreiben.
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'>
Es ist auch möglich, eine im Modul definierte Klasse anzugeben und zu importieren.
from urllib.error import HTTPError
print(HTTPError)
# <class 'urllib.error.HTTPError'>
Beachten SIE, dass SIE das Modul darunter importieren müssen, WENN der Code für die Initialisierung nicht so in __init__.py geschrieben ist.
If you IPython/Jupyter Notebook use, can SIE urllib.parse verwenden, Indem Sie einfach urllib importieren. Dieses Verhalten wird durch den IPython-Startvorgang verursacht.
Sammlungen
Führen Sie als anderes Beispiel Sammlungen ein.
Das Sammlungsverzeichnis besteht aus den folgenden.
collections/
├── __init__.py
└── abc.py
In Sammlungen werden Klassen wie Counter und OrderedDict in __init__.py definiert, anstatt Moduldateien wie urllib zu speichern.
In einem solchen Fall können Sie beim Importieren eines Pakets die Klasse als ..
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'>
Sie können keine Klassen importieren mit ..
# import collections.Counter
# ModuleNotFoundError: No module named 'collections.Counter'
Sie können Klassen mit importieren.
from collections import Counter
print(Counter)
# <class 'collections.Counter'>
NumPy
Beispiel einer Bibliothek eines Drittanbieters, NumPy:
In NumPy wird jedes Unterpaket in __init__.py im Verzeichnis numpy importiert.
Sie müssen nicht jedes Modul importieren. Schreiben Sie einfach import numpy als np, um verschiedene Funktionen zu verwenden.
scikit-lernen
Der Fall von scikit-learn ist anders.
scikit-learn importiert keine Unterpakete in __init__.py im sklearn-Verzeichnis.
Sie müssen die Unterpakete wie folgt explizit importieren.
from sklearn import datasets, model_selection, svm, metrics
ModuleNotFoundError
Fehler, dass das Modul nicht gefunden werden kann.
ModuleNotFoundError: No module named 'xxx'
Der Name des Moduls oder der Modulsuchpfad sind möglicherweise falsch.
Wie im obigen Sammlungsbeispiel gezeigt, wird ModuleNotFoundError auch ausgelöst, wenn Sie versuchen, eine Klasse anstelle eines Moduls zu importieren. Verwenden Sie from, um eine Funktion oder Klasse zu importieren.
AttributFehler
Fehler, dass das importierte Modul das angegebene Attribut nicht hat.
AttributeError: module 'xxx' has no attribute 'yyy'
Es ist möglich, dass nicht die richtige Datei importiert wird.
Wenn Sie beispielsweise import schreiben, ist die erste Priorität für die Modulsuche dasselbe Verzeichnis wie die ausgeführte Skriptdatei. Wenn auch eine Datei namens .py im Verzeichnis vorhanden ist, WIRD diese Datei importiert.
Sie print(), um zu prüfen, ob die Datei vom erwarteten Speicherort importiert wurde, und wenn dies nicht der Fall ist, benennen oder verschieben Sie die Datei.