Що робить a. в імпорті імпорту в Python означає?


141

Я переглядаю код multiprocessingмодуля Python , і він містить цей рядок:

from ._multiprocessing import win32, Connection, PipeConnection

замість

from _multiprocessing import win32, Connection, PipeConnection

тонка різниця - період, що раніше _multiprocessing. Що це означає? Чому саме період?


3
Це називається відносний імпорт: docs.python.org/tutorial/modules.html
Aillyn,

Без того ., якби у вас був файл _multiprocessing.pyз якихось нерозбірливих причин поруч із вашим основним сценарієм, він multiprocessingби зламався. Завдяки ., це гарантує отримання власного модуля.
Кріс Морган

Якщо .посилання на однорангові модулі, чому в документації сказано використовувати а, .коли цей багатопроцесорний модуль повинен бути частиною звичайних бібліотек sys.path? Чи поєднує їх питання та пояснення Кріса чи я не розумію? Вдячні за допомогу.
rfii

Відповіді:


120

Ось новий синтаксис для явного відносного імпорту . Це означає імпорт із поточного пакету.


26
Що визначає, що таке "поточний пакет"?
матч

7
Слід сказати, звідки знаходиться імпортний пакет . Це в основному означає поточну область імен або каталог пакунків.
Кіт

2
Дякую, я думаю, я знаю, що ти маєш на увазі. Щоб було зрозуміло, чи не проти ви навести приклад?
матч

11
Ви можете робити такі речі, як:from . import peermodule from .. import parentpackagemodule
Кіт

2
@bmc Хороший спосіб навчитися - це створити невеликий експеримент і спробувати його самостійно. ;-)
Кіт

22

Крапка у назві модуля використовується для відносного імпорту модуля (див. Тут і тут , розділ 6.4.2).

Ви можете використовувати більше, ніж одну крапку, посилаючись не на пакет з ліками, а на його батьків (и). Це слід використовувати лише в пакетах, у головному модулі завжди слід використовувати абсолютні назви модулів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.