Skip to content

Wie man in Python Module, Pakete, Funktionen usw. importiert

Python

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.

  1. Standardbibliotheken
  2. Bibliotheken von Drittanbietern
  3. 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.