Co robi. w instrukcji importu w Pythonie oznacza?

141

Przeglądam kod multiprocessingmodułu Pythona i zawiera on następujący wiersz:

from ._multiprocessing import win32, Connection, PipeConnection

zamiast

from _multiprocessing import win32, Connection, PipeConnection

subtelna różnica dotyczy okresu poprzedniego _multiprocessing. Co to znaczy? Dlaczego ten okres?

Vlad the Impala
źródło
3
Nazywa się to importem względnym: docs.python.org/tutorial/modules.html
Aillyn
Bez tego ., gdybyś miał plik _multiprocessing.pyz jakiegoś nieczytelnego powodu obok głównego skryptu, multiprocessingzepsułoby się. Dzięki .temu zapewnia, że ​​otrzymuje własny moduł.
Chris Morgan,
Jeśli a .odnosi się do modułów równorzędnych, dlaczego w dokumentacji miałoby być napisane, aby używać a, .skoro ten moduł wieloprocesorowy powinien być częścią zwykłych bibliotek sys.path? Czy pytanie i wyjaśnienie Chrisa mylą je, czy też nie rozumiem? Doceń pomoc.
rfii

Odpowiedzi:

120

To jest nowa składnia dla jawnych importów względnych . Oznacza to import z aktualnego pakietu.

Keith
źródło
26
Co definiuje, czym jest „obecny pakiet”?
fraxture
7
Powinien powiedzieć, skąd jest pakiet importujący . Zasadniczo oznacza bieżącą przestrzeń nazw lub katalog pakietu.
Keith,
2
Dzięki, myślę, że wiem, co masz na myśli. Dla jasności, czy mógłbyś podać przykład?
fraxture
11
Możesz na przykład:from . import peermodule from .. import parentpackagemodule
Keith
2
@bmc Dobrym sposobem na naukę jest skonfigurowanie małego eksperymentu i samodzielne wypróbowanie. ;-)
Keith
22

Kropka w nazwie modułu służy do względnego importu modułu (patrz tutaj i tutaj , sekcja 6.4.2).

Możesz użyć więcej niż jednej kropki, odnosząc się nie do aktualnego pakietu, ale do jego rodzica (ów). Powinno to być używane tylko w pakietach, w głównym module należy zawsze używać bezwzględnych nazw modułów.

Martin Gunia
źródło