Distribuição de arquivo python único: módulo ou pacote?

24

Suponha que eu tenha uma função ou classe python útil (ou o que seja) chamada useful_thingque exista em um único arquivo. Existem essencialmente duas maneiras de organizar a árvore de origem. A primeira maneira usa um único módulo:

- setup.py
- README.rst
- ...etc...
- foo.py

onde useful_thingé definido em foo.py. A segunda estratégia é fazer um pacote:

- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py

onde useful_thingé definido em module.py. No caso do pacote __init__.pyficaria assim

from foo.module import useful_thing

para que nos dois casos você possa fazer from foo import useful_thing.

Pergunta: Qual o caminho preferido e por quê?

EDIT: Como o usuário gnat diz que esta pergunta está mal formada, acrescentarei que o tutorial oficial de empacotamento do python parece não comentar sobre qual dos métodos descritos acima é o preferido. Eu explicitamente estou não dando a minha lista pessoal de prós e contras, porque eu estou interessado em saber se há um método comunidade preferido, não gerando uma discussão sobre vantagens / desvantagens :)

DanielSank
fonte
Compartilhar sua pesquisa ajuda a todos . Conte-nos o que você tentou e por que ele não atendeu às suas necessidades. Isso demonstra que você reservou um tempo para tentar ajudar a si mesmo, evita reiterar respostas óbvias e, acima de tudo, ajuda a obter uma resposta mais específica e relevante. Veja também How to Ask
gnat
11
@gnat: Obrigado pelo link para o como perguntar. Estou ciente da boa prática de fazer perguntas, mas, neste caso, não achei apropriado dar a minha experiência, porque isso provavelmente transformaria o que pedi como uma pergunta clara "A ou B" em uma solicitação de opiniões. Como você recomendaria melhorar essa questão sem torná-la baseada em opiniões?
precisa saber é o seguinte
@gnat: Em outras palavras, se eu estivesse interessado em uma lista de prós / contras dos dois métodos, eu teria perguntado "Quais são os prós e contras desses dois métodos" e teria incluído minha própria lista parcial.
precisa saber é o seguinte

Respostas:

17

Você faz a coisa mais simples que funciona para você .

Para um módulo de uma função , não há absolutamente nenhum sentido em criar um pacote. Os pacotes são úteis para criar um espaço para nome adicional e / ou para organizar seu código em vários módulos.

Os módulos jsone unittestna biblioteca padrão do Python são realmente pacotes, por exemplo, para fins de organização de código. Mas é perfeitamente bom deixar o código atualmente vivendo em apenas um arquivo python, como um módulo.

Se você quiser exemplos:

Para um bom exemplo de projetos que realmente fazem excelente uso de pacotes, veja:

Não há recomendação 'oficial'; ambas as opções são totalmente válidas.

Martijn Pieters
fonte
Portanto, não existe um método oficialmente preferido?
precisa saber é o seguinte
3
Não, não há método preferido.
Martijn Pieters