Есть стандартный layout для python проектов?
Есть стандартный layout для python проектов? Например, для golang такой сделан.
Меня интересует структура проекта для микросервиса.
Ответы (2 шт):
На Питоне разрабатываются проекты для разных задач и под разные платформы с использованием различных фреймворков, движков и прочих технологий. Структуры проектов ничто не ограничивает и мало кто регламентирует, поэтому зачастую они получаются очень специфическими для конкретного проекта.
Среди фреймворков, свою стандартную структуру проектов продвигает Django (там она формируется автоматически командой django-admin startproject mysite). Схематично это выглядит так:
[projectname]/
├── [projectname]/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
Подробнее о ней можно узнать в соответствующем вопросе на enSO и в этой доке. Однако стоит заметить, что ничто не мешает создать Django-проект с любой другой структурой.
Также, структуру проекта задаёт Flask, но не стандартно и автоматически, а только небольшим описанием в документации.
Большинство других фреймворков никак не регламентируют структуру проектов (вероятно, в виду не такой популярности, как у того же Django), и разработчики-пользователи_библиотек сами выбирают подходы руководствуясь опытом, спецификой проекта и здравым смыслом. Например, как в этом обсуждении структуры проектов на PyGame.
Как было сказано в ответе @AivanF., существует layout для django. У меня к нему есть несколько вопросов. Для того, чтобы прояснить для себя эти вопросы и структурировать их, я сделал репозиторий, в котором описал то, как я структурирую мои проекты. Существуют несколько сущностей:
- Интеграционные тесты
- Сервис, CLI и другие API
- Core-library
- Unit-тесты
- API-core
Интеграционные тесты
Тесты общаются только с API посредстам публичных интерфейсов. Именно их они и тестируют.
Сервис, CLI и другие API
В пакете, который публикуется в pypi-registry содержатся все публичные интервейсы. Их можно использовать как консольные утилиты, например, или как сервера. Они идут в комплекте с установщиком. Ипортировать в других библиотеках их запрещено.
Core-library
Все функции, которые реализуют бизнес-логику, обращения к другим базам данных и т.д.
Core-API
Публичные функции, которые доступны для импорта в других пакетах.
