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

Python 2.x 2.7

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.

Python 2.x 2.7

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:

  1. Importe sollten in separaten Zeilen erfolgen:

     from math import sqrt, ceil      # Not recommended
     from math import sqrt            # Recommended
     from math import ceil
    
  1. Bestellen Sie Importe wie folgt oben im Modul:

    • Standardbibliothekimporte
    • Verbundene Importe Dritter
    • Lokale anwendungs- / bibliotheksspezifische Importe
  2. 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 vom module stammt oder nicht. Dies trifft doppelt zu, wenn Sie mehrere from module import * Anweisungen from module import * Typ from module import * .

  3. 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:

Python 2.x 2.3
import math
math.pi = 3
print(math.pi)    # 3
reload(math)
print(math.pi)    # 3.141592653589793

Python 3


Die reload Funktion wurde nach importlib :

Python 3.x 3.0
import math
math.pi = 3
print(math.pi)    # 3
from importlib import reload
reload(math)
print(math.pi)    # 3.141592653589793


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow