Прекратите ручную работу, вместо этого повторно используйте шаблоны проектов
Вот ситуация, с которой знакомы многие специалисты по данным.
Каждый раз, когда вы начинаете новый проект, вы повторно используете структуру старых проектов. Вы просматриваете их папки и копируете-вставляете их, вы удаляете ненужные файлы, вы переименовываете оставшиеся в соответствии с особенностями вашего нового проекта, заходите внутрь каждого файла конфигурации и заменяете старые переменные среды (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
: для развертывания на Herokurequirements.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
✅
Его .env
file ✅
Его app.py
file ✅
Все хорошо. Проект имеет желаемую структуру, а файлы содержат нужные данные.
Теперь мы можем приступить к работе над этим приложением.
Cookiecutter Data Science
Одна замечательная черта cookiecutter - это активное сообщество. Существует множество шаблонов с открытым исходным кодом в разных вариантах (Django, Flask, FastAPI, что угодно). Вы можете легко найти их на Github и начать использовать.
Один конкретный шаблон, который привлек мое внимание, - Cookiecutter Data Science.
По словам авторов, это шаблон:
Логичная, достаточно стандартизованная, но гибкая структура проекта для выполнения и обмена данными в области науки о данных.
На практике этот шаблон предоставляет набор каталогов для лучшей организации вашей работы. Это немного самоуверенно, но следует передовой практике, с которой согласны в данной области.
На мой взгляд, помогает:
- Организация модулей по ответственности: создание наборов данных, разработка функций, моделирование, визуализация.
- Организация данных по этапам конвейера
- Применение модульных тестов
- Создание документации
Вы можете начать использовать этот шаблон следующим образом:
Когда вы закончите устанавливать значения для каждого элемента, вы получите следующую структуру:
Необязательно придерживаться этой структуры: если она вам не нравится, вы можете создать вилку шаблона и изменить его в соответствии со своими потребностями.
Ресурсы
Cookiecutter - фантастическая библиотека. Это помогает автоматизировать создание проектов и не дает вам повторяться. Как специалист по данным, он должен быть частью вашего набора инструментов.
Чтобы узнать больше о Cookiecutter, я выбрал несколько полезных ресурсов, которые вы легко можете найти:
- Https://github.com/cookiecutter/cookiecutter
- Https://drivendata.github.io/cookiecutter-data-science/
- Https://dev.to/azure/10-top-tips-for-reproducible-machine-learning-36g0
- Https://towardsdatascience.com/template-your-data-science-projects-with-cookiecutter-754d3c584d13
- Https://youtu.be/nExL0SgKsDY (отличное видео на Youtube)
Спасибо за чтение 🙏
Если вы дожили до конца, я искренне благодарю вас за ваше время и надеюсь, что вы узнали что-то о cookiecutter и шаблонах проектов.
На сегодня все для меня. До следующего раза для получения дополнительных советов и руководств по программированию. 👋