O que faz um . em uma declaração de importação em Python significa?

140

Estou olhando o código para o multiprocessingmódulo do Python , e ele contém esta linha:

from ._multiprocessing import win32, Connection, PipeConnection

ao invés de

from _multiprocessing import win32, Connection, PipeConnection

a diferença sutil é o período anterior _multiprocessing. O que isso significa? Por que o período?

Vlad, o Impala
fonte
3
É chamado de importação relativa: docs.python.org/tutorial/modules.html
Aillyn
Sem o ., se você tivesse um arquivo _multiprocessing.pypor algum motivo indecifrável próximo ao seu script principal, multiprocessingseria interrompido. Com o ., garante que ele obtenha seu próprio módulo.
Chris Morgan
Se a .se refere a módulos de mesmo nível, por que a documentação diria usar a .quando esse módulo de multiprocessamento deve fazer parte das bibliotecas sys.path regulares? A pergunta e o esclarecimento de Chris os misturam ou não estou entendendo? Agradecemos a ajuda.
rfii 16/07

Respostas:

120

Essa é a nova sintaxe para importações relativas explícitas . Significa importar do pacote atual.

Keith
fonte
26
O que define o que é o "pacote atual"?
fraxture
7
Deve dizer de onde está o pacote de importação . Basicamente, significa o namespace atual ou o diretório do pacote.
Keith
2
Obrigado, acho que sei o que você quer dizer. Só para esclarecer, você se importaria em dar um exemplo?
fraxture
11
Você pode fazer coisas como: from . import peermodule from .. import parentpackagemodule
Keith
2
@bmc Uma boa maneira de aprender é montar um pequeno experimento e experimentar você mesmo. ;-)
Keith
22

O ponto no nome do módulo é usado para a importação relativa do módulo (veja aqui e aqui , seção 6.4.2).

Você pode usar mais de um ponto, referindo-se não ao pacote atual, mas ao (s) pai (s). Isso deve ser usado apenas dentro de pacotes, no módulo principal sempre deve-se usar nomes absolutos de módulo.

Martin Gunia
fonte