Есть стандартный layout для python проектов?

Есть стандартный layout для python проектов? Например, для golang такой сделан.

Меня интересует структура проекта для микросервиса.


Ответы (2 шт):

Автор решения: AivanF.

На Питоне разрабатываются проекты для разных задач и под разные платформы с использованием различных фреймворков, движков и прочих технологий. Структуры проектов ничто не ограничивает и мало кто регламентирует, поэтому зачастую они получаются очень специфическими для конкретного проекта.

Среди фреймворков, свою стандартную структуру проектов продвигает Django (там она формируется автоматически командой django-admin startproject mysite). Схематично это выглядит так:

[projectname]/
├── [projectname]/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Подробнее о ней можно узнать в соответствующем вопросе на enSO и в этой доке. Однако стоит заметить, что ничто не мешает создать Django-проект с любой другой структурой.

Также, структуру проекта задаёт Flask, но не стандартно и автоматически, а только небольшим описанием в документации.

Большинство других фреймворков никак не регламентируют структуру проектов (вероятно, в виду не такой популярности, как у того же Django), и разработчики-пользователи_библиотек сами выбирают подходы руководствуясь опытом, спецификой проекта и здравым смыслом. Например, как в этом обсуждении структуры проектов на PyGame.

→ Ссылка
Автор решения: hedgehogues

Как было сказано в ответе @AivanF., существует layout для django. У меня к нему есть несколько вопросов. Для того, чтобы прояснить для себя эти вопросы и структурировать их, я сделал репозиторий, в котором описал то, как я структурирую мои проекты. Существуют несколько сущностей:

введите сюда описание изображения

  • Интеграционные тесты
  • Сервис, CLI и другие API
  • Core-library
  • Unit-тесты
  • API-core

Интеграционные тесты

Тесты общаются только с API посредстам публичных интерфейсов. Именно их они и тестируют.

Сервис, CLI и другие API

В пакете, который публикуется в pypi-registry содержатся все публичные интервейсы. Их можно использовать как консольные утилиты, например, или как сервера. Они идут в комплекте с установщиком. Ипортировать в других библиотеках их запрещено.

Core-library

Все функции, которые реализуют бизнес-логику, обращения к другим базам данных и т.д.

Core-API

Публичные функции, которые доступны для импорта в других пакетах.

→ Ссылка