Что делает в утверждении импорта в 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? Вопрос и разъяснение Криса смешивают их или я не понимаю? Ценю помощь.
РФии

Ответы:

120

Это новый синтаксис для явного относительного импорта . Это означает импорт из текущего пакета.

Кит
источник
26
Что определяет, что такое «текущий пакет»?
фрагмент
7
Следует сказать, откуда находится импортируемый пакет . Это в основном означает текущее пространство имен или каталог пакета.
Кит
2
Спасибо, я думаю, я знаю, что вы имеете в виду. Просто чтобы прояснить, не могли бы вы привести пример?
Fragture
11
Вы можете делать такие вещи, как:from . import peermodule from .. import parentpackagemodule
Кит
2
@bmc Хороший способ научиться - это провести небольшой эксперимент и попробовать его самостоятельно. ;-)
Кит
22

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

Вы можете использовать более одной точки, ссылаясь не на пакет curent, а на его родителей. Это должно использоваться только в пакетах, в основном модуле всегда следует использовать абсолютные имена модулей.

Мартин Гуния
источник