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?


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.