Python Language
Module importieren
Suche…
Syntax
- import modulname
- import modulname.submodulname
- aus Modulname import *
- von module_name Import submodule_name [, class_name, function_name, ... etc]
- Importiere aus modulname einige_namen als neue_namen
- aus modulname.submodulname import klassenname [, funktionsname , ... etc]
Bemerkungen
Beim Importieren eines Moduls wertet Python den gesamten Code der obersten Ebene in diesem Modul aus, sodass alle Funktionen, Klassen und Variablen, die das Modul enthält, gelernt werden . Wenn Sie möchten, dass ein Modul an einem anderen Ort importiert wird, achten Sie auf den Code der obersten Ebene und kapseln Sie es in if __name__ == '__main__':
wenn Sie nicht möchten, dass das Modul beim Importieren des Moduls ausgeführt wird.
Modul importieren
Verwenden Sie die import
Anweisung:
>>> import random
>>> print(random.randint(1, 10))
4
import module
importiert ein Modul und ermöglicht Ihnen dann, mit der Syntax module.name
auf seine Objekte - beispielsweise Werte, Funktionen und Klassen - zu module.name
. Im obigen Beispiel wird das random
importiert, das die randint
Funktion enthält. randint
Sie random
importieren, können Sie randint
mit random.randint
.
Sie können ein Modul importieren und einem anderen Namen zuweisen:
>>> import random as rn
>>> print(rn.randint(1, 10))
4
Wenn sich Ihre Python-Datei main.py
im selben Ordner befindet wie custom.py
. Sie können es so importieren:
import custom
Es ist auch möglich, eine Funktion aus einem Modul zu importieren:
>>> from math import sin
>>> sin(1)
0.8414709848078965
Um bestimmte Funktionen tiefer in ein Modul zu importieren, darf der Punktoperator nur auf der linken Seite des Schlüsselworts import
:
from urllib.request import urlopen
In Python haben wir zwei Möglichkeiten, die Funktion von der obersten Ebene aufzurufen. Einer ist import
und ein anderer kommt from
. Wir sollten import
wenn eine Namenskollision möglich ist. Nehmen wir an, wir haben hello.py
Dateien und world.py
Dateien mit derselben Funktion namens function
. Dann funktioniert die import
Anweisung gut.
from hello import function
from world import function
function() #world's function will be invoked. Not hello's
Im Allgemeinen stellt der import
einen Namespace bereit.
import hello
import world
hello.function() # exclusively hello's function will be invoked
world.function() # exclusively world's function will be invoked
Wenn Sie sich jedoch sicher sind, gibt es in Ihrem gesamten Projekt keine Möglichkeit, denselben Funktionsnamen zu verwenden, den Sie from
Anweisung verwenden sollten
Mehrere Importe können in derselben Zeile durchgeführt werden:
>>> # Multiple modules
>>> import time, sockets, random
>>> # Multiple functions
>>> from math import sin, cos, tan
>>> # Multiple constants
>>> from math import pi, e
>>> print(pi)
3.141592653589793
>>> print(cos(45))
0.5253219888177297
>>> print(time.time())
1482807222.7240417
Die oben gezeigten Schlüsselwörter und Syntax können auch in Kombinationen verwendet werden:
>>> from urllib.request import urlopen as geturl, pathname2url as path2url, getproxies
>>> from math import factorial as fact, gamma, atan as arctan
>>> import random.randint, time, sys
>>> print(time.time())
1482807222.7240417
>>> print(arctan(60))
1.554131203080956
>>> filepath = "/dogs/jumping poodle (december).png"
>>> print(path2url(filepath))
/dogs/jumping%20poodle%20%28december%29.png
Bestimmte Namen aus einem Modul importieren
Anstatt das komplette Modul zu importieren, können Sie nur die angegebenen Namen importieren:
from random import randint # Syntax "from MODULENAME import NAME1[, NAME2[, ...]]"
print(randint(1, 10)) # Out: 5
from random
ist erforderlich, da der Python-Interpreter wissen muss, von welcher Ressource er eine Funktion oder Klasse import randint
und import randint
gibt die Funktion oder Klasse selbst an.
Weiteres Beispiel (ähnlich wie oben):
from math import pi
print(pi) # Out: 3.14159265359
Das folgende Beispiel führt zu einem Fehler, da wir kein Modul importiert haben:
random.randrange(1, 10) # works only if "import random" has been run before
Ausgänge:
NameError: name 'random' is not defined
Der Python-Interpreter versteht nicht, was Sie mit random
meinen. Es muss deklariert werden, indem import random
zum Beispiel hinzugefügt wird:
import random
random.randrange(1, 10)
Importieren aller Namen aus einem Modul
from module_name import *
zum Beispiel:
from math import *
sqrt(2) # instead of math.sqrt(2)
ceil(2.7) # instead of math.ceil(2.7)
Dadurch werden alle im math
Modul definierten Namen in den globalen Namespace importiert, mit Ausnahme von Namen, die mit einem Unterstrich beginnen (was darauf hinweist, dass der Verfasser der Meinung ist, dass er nur zur internen Verwendung bestimmt ist).
Warnung : Wenn eine Funktion mit demselben Namen bereits definiert oder importiert wurde, wird sie überschrieben . Beim Importieren nur bestimmter Namen from math import sqrt, ceil
fast immer empfohlen :
def sqrt(num):
print("I don't know what's the square root of {}.".format(num))
sqrt(4)
# Output: I don't know what's the square root of 4.
from math import *
sqrt(4)
# Output: 2.0
Markierte Importe sind nur auf Modulebene erlaubt. Versuche, sie in Klassen- oder Funktionsdefinitionen auszuführen, führen zu einem SyntaxError
.
def f():
from math import *
und
class A:
from math import *
beide scheitern mit:
SyntaxError: import * only allowed at module level
Die spezielle Variable __all__
Module können über eine spezielle Variable mit dem Namen __all__
zu beschränken, welche Variablen bei Verwendung from mymodule import *
.
Gegeben das folgende Modul:
# mymodule.py
__all__ = ['imported_by_star']
imported_by_star = 42
not_imported_by_star = 21
Nur imported_by_star
importiert wird bei der Verwendung from mymodule import *
:
>>> from mymodule import *
>>> imported_by_star
42
>>> not_imported_by_star
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'not_imported_by_star' is not defined
not_imported_by_star
kann jedoch explizit importiert werden:
>>> from mymodule import not_imported_by_star
>>> not_imported_by_star
21
Programmatisches Importieren
Verwenden importlib
zum Importieren eines Moduls über einen Funktionsaufruf das Modul importlib
(in Python ab Version 2.7 enthalten):
import importlib
random = importlib.import_module("random")
Die Funktion importlib.import_module()
importiert auch das Submodul eines Pakets direkt:
collections_abc = importlib.import_module("collections.abc")
Verwenden Sie für ältere Python-Versionen das imp
Modul.
Verwenden Sie die Funktionen imp.find_module
und imp.load_module
, um einen programmgesteuerten Import durchzuführen.
Aus der Standard-Bibliotheksdokumentation entnommen
import imp, sys
def import_module(name):
fp, pathname, description = imp.find_module(name)
try:
return imp.load_module(name, fp, pathname, description)
finally:
if fp:
fp.close()
Verwenden Sie NICHT __import__()
, um Module programmgesteuert zu importieren! Es gibt subtile Details wie sys.modules
, das fromlist
Argument usw., die leicht zu übersehen sind, welche importlib.import_module()
für Sie behandelt.
Importieren Sie Module von einem beliebigen Dateisystemort aus
Wenn Sie ein Modul importieren möchten, das noch nicht als integriertes Modul in der Python Standard Library oder als Side-Package vorhanden ist, können Sie dies tun, indem Sie den Pfad zu dem Verzeichnis hinzufügen, in dem sich Ihr Modul befindet sys.path
. Dies kann nützlich sein, wenn auf einem Host mehrere Python-Umgebungen vorhanden sind.
import sys
sys.path.append("/path/to/directory/containing/your/module")
import mymodule
Es ist wichtig, dass Sie den Pfad an das Verzeichnis anhängen, in dem sich mymodule
befindet, nicht den Pfad zum Modul selbst.
PEP8-Regeln für Importe
Einige empfohlene PEP8- Richtlinien für den Import:
Importe sollten in separaten Zeilen erfolgen:
from math import sqrt, ceil # Not recommended from math import sqrt # Recommended from math import ceil
Bestellen Sie Importe wie folgt oben im Modul:
- Standardbibliothekimporte
- Verbundene Importe Dritter
- Lokale anwendungs- / bibliotheksspezifische Importe
Platzhalterimporte sollten vermieden werden, da dies zu Verwirrungen bei Namen im aktuellen Namespace führt. Wenn Sie das
from module import *
, kann es unklar sein, ob ein bestimmter Name in Ihrem Code vommodule
stammt oder nicht. Dies trifft doppelt zu, wenn Sie mehrerefrom module import *
Anweisungenfrom module import *
Typfrom module import *
.Verwenden Sie keine relativen Importe. Verwenden Sie stattdessen explizite Importe.
Submodule importieren
from module.submodule import function
Diese function
importiert die function
von module.submodule
.
__import __ () - Funktion
Mit der Funktion __import__()
können Module importiert werden, bei denen der Name nur zur Laufzeit bekannt ist
if user_input == "os":
os = __import__("os")
# equivalent to import os
Diese Funktion kann auch verwendet werden, um den Dateipfad zu einem Modul anzugeben
mod = __import__(r"C:/path/to/file/anywhere/on/computer/module.py")
Ein Modul erneut importieren
Wenn Sie den interaktiven Interpreter verwenden, möchten Sie möglicherweise ein Modul erneut laden. Dies kann nützlich sein, wenn Sie ein Modul bearbeiten und die neueste Version importieren möchten oder wenn Sie ein Element eines vorhandenen Moduls mit einem Affen-Patch versehen haben und Ihre Änderungen rückgängig machen möchten.
Beachten Sie, dass Sie das Modul nicht einfach erneut import
können, um es zurückzusetzen:
import math
math.pi = 3
print(math.pi) # 3
import math
print(math.pi) # 3
Dies liegt daran, dass der Interpreter jedes importierte Modul registriert. Wenn Sie versuchen, ein Modul erneut zu importieren, sieht der Interpreter dies im Register und tut nichts. Der schwerste Weg für den Reimport ist also der import
nach dem Entfernen des entsprechenden Elements aus dem Register:
print(math.pi) # 3
import sys
if 'math' in sys.modules: # Is the ``math`` module in the register?
del sys.modules['math'] # If so, remove it.
import math
print(math.pi) # 3.141592653589793
Aber es gibt mehr einen einfachen und einfachen Weg.
Python 2
Verwenden Sie die reload
Funktion:
import math
math.pi = 3
print(math.pi) # 3
reload(math)
print(math.pi) # 3.141592653589793
Python 3
Die reload
Funktion wurde nach importlib
:
import math
math.pi = 3
print(math.pi) # 3
from importlib import reload
reload(math)
print(math.pi) # 3.141592653589793