layout src vs layout plano¶
O “layout plano” (em inglês, flat layout) refere-se à organização dos arquivos de um projeto em uma pasta ou repositório, de forma que os vários arquivos de configuração e pacotes de importação estejam todos no diretório de nível superior.
.
├── README.md
├── noxfile.py
├── pyproject.toml
├── setup.py
├── awesome_package/
│ ├── __init__.py
│ └── module.py
└── tools/
├── generate_awesomeness.py
└── decrease_world_suck.py
O “layout src” (em inglês, layout src)se desvia do layout plano movendo o código que se destina a ser importável (ou seja, import awesome_package
, também conhecido como pacotes de importação) para um subdiretório. Este subdiretório é normalmente chamado de src/
, daí “layout src”.
.
├── README.md
├── noxfile.py
├── pyproject.toml
├── setup.py
├── src/
│ └── awesome_package/
│ ├── __init__.py
│ └── module.py
└── tools/
├── generate_awesomeness.py
└── decrease_world_suck.py
Aqui está uma análise das diferenças de comportamento importantes entre o layout src e o layout plano:
O layout src requer a instalação do projeto para poder executar seu código, e o layout plano não.
Isso significa que o layout src envolve uma etapa adicional no fluxo de trabalho de desenvolvimento de um projeto (normalmente, uma instalação editável é usada para desenvolvimento e uma instalação regular é usada para teste) .
O layout src ajuda a evitar o uso acidental da cópia em desenvolvimento do código.
Isso é relevante, pois o interpretador Python inclui o diretório de trabalho atual como o primeiro item no caminho de importação. Isso significa que se existir um pacote de importação no diretório de trabalho atual com o mesmo nome de um pacote de importação instalado, a variante do diretório de trabalho atual será usada. Isso pode levar a uma configuração incorreta sutil das ferramentas de empacotamento do projeto, o que pode resultar na não inclusão de arquivos em uma distribuição.
O layout src ajuda a evitar isso mantendo os pacotes de importação em um diretório separado do diretório raiz do projeto, garantindo que a cópia instalada seja usada.
O layout src ajuda a reforçar que uma instalação editável só é capaz de importar arquivos que deveriam ser importados.
Isso é especialmente relevante quando a instalação editável é implementada usando um arquivo de configuração de caminho que adiciona o diretório ao caminho de importação.
O layout plano adicionaria os outros arquivos de projeto (por exemplo:
README.md
,tox.ini
) e arquivos de configuração de pacotes/ferramentas (por exemplo:setup.py
,noxfile.py
) no caminho de importação. Isso faria com que certas importações funcionassem em instalações editáveis, mas não em instalações regulares.