Прекратите ручную работу, вместо этого повторно используйте шаблоны проектов

Вот ситуация, с которой знакомы многие специалисты по данным.

Каждый раз, когда вы начинаете новый проект, вы повторно используете структуру старых проектов. Вы просматриваете их папки и копируете-вставляете их, вы удаляете ненужные файлы, вы переименовываете оставшиеся в соответствии с особенностями вашего нового проекта, заходите внутрь каждого файла конфигурации и заменяете старые переменные среды (URL-адреса, ключи API, хосты, порты и т. д.) с новыми.

И, может быть, кто знает, по ходу дела вы создадите новые конфигурации и новые папки.

❌ Мы все согласны с тем, что это довольно утомительная и повторяющаяся задача. Не говоря уже о том, что он подвержен ошибкам.

✅ Разве не было бы удобнее начинать каждый новый проект с мастер-шаблона, который вы клонируете и заполняете конкретной информацией из терминала? Было бы неплохо, если бы этот шаблон автоматически создавал для вас всю структуру папок и заполнял файлы нужными именами и переменными, которые вы определяете?

Cookiecutter - правильное решение этой проблемы.

В этом посте мы рассмотрим cookiecutter.
Мы поймем, как он работает и как вы можете использовать его для создания пользовательских и многоразовых шаблонов для ваших проектов.
Затем мы рассмотрим шаблон с открытым исходным кодом Cookiecutter Data Science, чтобы запустить проекты в области науки о данных, соответствующие лучшим стандартам в отрасли.

Без лишних слов, давайте посмотрим 🔍

Что такое cookiecutter?

Cookiecutter создает проекты из шаблонов проектов. - официальный док

  • Проекты могут быть пакетами Python, веб-приложениями, приложениями для машинного обучения со сложными рабочими процессами или чем угодно, что вы можете придумать.
  • Шаблоны - это то, что cookiecutter использует для создания проектов. Они полагаются на синтаксис Jinja2

То, что делает cookiecutter, довольно просто: он клонирует каталог и помещает его в ваш новый проект. Затем он заменяет все имена между {{ и }} (синтаксис Jinja2) именами, которые он находит в файле cookiecutter.json. (Мы увидим пример создания шаблона cookiecutter в следующем разделе)

Чтобы начать использовать cookiecutter, вы можете установить его с помощью pip:

pip install cookiecutter

или conda:

conda install -c conda-forge cookiecutter

👉 Вы можете использовать cookiecutter на всех платформах: Windows, Mac и Linux
👉 Он работает с Python 2.7+ и 3.5+ (хотя предпочитаете Python 3.5+, так как Python 2.7 больше не поддерживается)
👉 Вы может использовать Cookiecutter для создания шаблонов на одном или нескольких языках

Как создать собственный шаблон cookiecutter для ваших проектов Streamlit?

В этом разделе я покажу вам, как создать шаблон cookiecutter для запуска проектов Streamlit.

Если вы не знакомы с Streamlit, это библиотека Python, предназначенная для создания веб-приложений. Он очень прост в использовании и предоставляет множество функций. Я использую его ежедневно, чтобы делиться экспериментами и результатами со своей командой и создавать прототипы приложений для машинного обучения.

Целевая структура

Мои проекты на основе Streamlit обычно имеют следующую структуру:

  • Папка src, содержащая основной сценарий приложения (app.py), а также модуль utils, содержащий два сценария: ui.py для размещения функций макета и common.py для хранения других служебных функций для обработки данных или удаленных подключений к базе данных (среди прочего)
  • .gitignore файл, чтобы git не управлял версиями ненужных файлов (таких как файлы .env или .pyc)
  • Procfile и setup.sh: для развертывания на Heroku
  • requirements.txt: чтобы вывести список зависимостей проекта
  • .env файл для хранения переменных среды проекта.
  • A README.md, чтобы поделиться подробностями о проекте

Создайте шаблон cookiecutter, соответствующий целевой структуре

Чтобы создать шаблон cookiecutter, который формирует эту структуру, давайте начнем с создания папки для этого шаблона.

mkdir streamlit-cookiecutter
cd streamlit-cookiecutter

Внутри этой папки создайте файл cookiecutter.json:

Несколько слов об этом файле:

  • Каждый ключ - это элемент, который cookiecutter будет запрашивать, когда запускает проект из шаблона.
  • Каждое значение соответствует значению по умолчанию для каждого элемента.
  • Значения пунктов устанавливаются по порядку. Например, repo_name устанавливается после project_name (поскольку его значение зависит от значения project_name)

Установка значений этих элементов происходит, когда вы клонируете шаблон с помощью cookiecutter: мы увидим, как это делается на следующем шаге.

Теперь создайте папку и поместите в нее желаемую целевую структуру. Назовем эту папку на основе элемента repo_name.
В синтаксисе cookiecutter: {{cookiecutter.repo_name}}.

Внутри папки {{cookiecutter.repo_name}} поместите желаемую структуру в свои проекты:

Каждый из этих файлов может получить доступ к значениям элементов, которые вы передаете в cookie-cutter: все, что вам нужно сделать, это использовать {{ и }}.

Давайте посмотрим, как мы можем это использовать.

👉 Создание README.md
Мы можем автоматически сгенерировать README.md, вставив в него элементы project_name, description, open_source_license.

👉 Установка переменных среды
Мы можем автоматически подставлять значения s3_bucket, _29 _, _ 30_, host и api_key в файл .env.

👉 Дедупликация кода
. Если ваши приложения Streamlit имеют одинаковую структуру и все начинаются с названия проекта в качестве заголовка, нет необходимости каждый раз повторять этот код.

Закончив работу с кодом шаблона, отправьте его на Github. Я сделал это, и вы можете проверить это здесь.

Протестируйте шаблон! 🚀

Теперь, когда шаблон размещен на Github, можно использовать его для запуска проекта.

Допустим, я хочу создать приложение для анализа настроений в Streamlit.

Все, что мне нужно сделать, это вызвать cookiecutter с URL-адресом шаблона.

cookiecutter [email protected]:ahmedbesbes/streamlit-cookiecutter.git

После того, как вы выполните эту команду, Cookiecutter попросит вас установить значения элементов, которые вы определили в файле cookiecutter.json (обратите внимание, что значение по умолчанию для каждого элемента заключено в скобки).

После ввода конкретных значений для каждого элемента создается проект.

Давай проверим его README.md

Его .envfile ✅

Его app.pyfile ✅

Все хорошо. Проект имеет желаемую структуру, а файлы содержат нужные данные.

Теперь мы можем приступить к работе над этим приложением.

Cookiecutter Data Science

Одна замечательная черта cookiecutter - это активное сообщество. Существует множество шаблонов с открытым исходным кодом в разных вариантах (Django, Flask, FastAPI, что угодно). Вы можете легко найти их на Github и начать использовать.

Один конкретный шаблон, который привлек мое внимание, - Cookiecutter Data Science.

По словам авторов, это шаблон:

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

На практике этот шаблон предоставляет набор каталогов для лучшей организации вашей работы. Это немного самоуверенно, но следует передовой практике, с которой согласны в данной области.

На мой взгляд, помогает:

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

Вы можете начать использовать этот шаблон следующим образом:

Когда вы закончите устанавливать значения для каждого элемента, вы получите следующую структуру:

Необязательно придерживаться этой структуры: если она вам не нравится, вы можете создать вилку шаблона и изменить его в соответствии со своими потребностями.

Ресурсы

Cookiecutter - фантастическая библиотека. Это помогает автоматизировать создание проектов и не дает вам повторяться. Как специалист по данным, он должен быть частью вашего набора инструментов.

Чтобы узнать больше о Cookiecutter, я выбрал несколько полезных ресурсов, которые вы легко можете найти:

Спасибо за чтение 🙏

Если вы дожили до конца, я искренне благодарю вас за ваше время и надеюсь, что вы узнали что-то о cookiecutter и шаблонах проектов.

На сегодня все для меня. До следующего раза для получения дополнительных советов и руководств по программированию. 👋

Впервые на Medium? Вы можете подписаться за 5 долларов в месяц и разблокировать неограниченное количество статей - нажмите здесь.