Was tut ein . in einer import Anweisung in Python bedeuten?

140

Ich sehe mir den Code für Pythons multiprocessingModul an und er enthält folgende Zeile:

from ._multiprocessing import win32, Connection, PipeConnection

anstatt

from _multiprocessing import win32, Connection, PipeConnection

Der subtile Unterschied ist die Zeit zuvor _multiprocessing. Was bedeutet das? Warum die Periode?

Vlad der Impala
quelle
3
Es heißt relativer Import: docs.python.org/tutorial/modules.html
Aillyn
Ohne die ., wenn Sie eine Datei _multiprocessing.pyaus einem nicht entzifferbaren Grund neben Ihrem Hauptskript hätten, multiprocessingwürde brechen. Mit dem .wird sichergestellt, dass es ein eigenes Modul erhält.
Chris Morgan
Wenn sich a .auf Peer-Module bezieht, warum sollte in der Dokumentation angegeben werden, .dass a verwendet werden soll, wenn dieses Multiprozessor-Modul Teil der regulären sys.path-Bibliotheken sein soll? Verwechseln die Frage und Chris 'Klarstellung sie oder verstehe ich das nicht? Schätzen Sie die Hilfe.
16.

Antworten:

120

Das ist die neue Syntax für explizite relative Importe . Dies bedeutet den Import aus dem aktuellen Paket.

Keith
quelle
26
Was definiert das "aktuelle Paket"?
Fraxtur
7
Es sollte angegeben werden, woher das importierende Paket stammt . Dies bedeutet im Wesentlichen den aktuellen Namespace oder das aktuelle Paketverzeichnis.
Keith
2
Danke, ich glaube ich weiß was du meinst. Würde es Ihnen etwas ausmachen, ein Beispiel zu geben?
Fraxtur
10
Sie können Dinge tun wie:from . import peermodule from .. import parentpackagemodule
Keith
1
@bmc Ein guter Weg zu lernen ist, ein kleines Experiment einzurichten und es selbst zu versuchen. ;-)
Keith
22

Der Punkt im Modulnamen wird für den relativen Modulimport verwendet (siehe hier und hier , Abschnitt 6.4.2).

Sie können mehr als einen Punkt verwenden, der sich nicht auf das aktuelle Paket, sondern auf dessen übergeordnete Elemente bezieht. Dies sollte nur innerhalb von Paketen verwendet werden, im Hauptmodul sollte man immer absolute Modulnamen verwenden.

Martin Gunia
quelle