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?


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.