Что делает в утверждении импорта в 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, а на его родителей. Это должно использоваться только в пакетах, в основном модуле всегда следует использовать абсолютные имена модулей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.