Módulo vs. Pacote?

140

Sempre que from 'x' import 'y'eu estava pensando, qual deles é considerado o 'módulo' e qual é o 'pacote', e por que não é o contrário?

Templário Sombrio
fonte
1
A respeito de por que não é o contrário, consulte stackoverflow.com/questions/3600352/…
1
Eu, por exemplo, sou grato por esta pergunta, porque a resposta é concisa e fornece o conhecimento exato necessário. A documentação é ótima e elegante, mas é detalhada e contém mais informações do que o que o OP estava pedindo e certamente mais do que eu precisava. Eu só queria uma resposta para essa pergunta específica, e a resposta abaixo é exatamente o que eu queria. Muitos de nós simplesmente não precisam de respostas formais ou detalhadas.
Teekin 24/03/19
Um conceito relacionado saber - Classes versus módulos em Python
RBT

Respostas:

192

Um módulo Python é simplesmente um arquivo de origem Python, que pode expor classes, funções e variáveis ​​globais.

Quando importado de outro arquivo de origem Python, o nome do arquivo é tratado como um espaço para nome.

Um pacote Python é simplesmente um diretório de módulo (s) Python.

Por exemplo, imagine a seguinte árvore de diretórios em /usr/lib/python/site-packages:

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py

Então você faria:

import mypackage.mymodule

ou

from mypackage.mymodule import myclass
Yam Marcovic
fonte
Ah, então quando você diz que o nome do arquivo é tratado como um espaço para nome, você faria algo assim? "mymodule.var1" para o primeiro caso ou "myclass.var1" para o segundo?
Dark Templar
1
Não exatamente. O pacote ainda conta como parte do espaço para nome. Se você quiser fazer o que disse, precisará do mypackage import mymodule.
Yam Marcovic
Pode ser útil adicionar algo sobre pacotes de namespace, para os quais o código não precisa necessariamente aparecer na mesma árvore de diretórios.
precisa saber é o seguinte
@holdenweb Nunca usei os diferentes mecanismos envolvidos lá diretamente, portanto não é um especialista. Se você fornecer uma explicação detalhada sobre o assunto em uma nova resposta, eu irei me referir a ela.
Yam Marcovic
Provavelmente um pouco muito esotérico para valer a pena, em retrospecto
holdenweb