- PVSM.RU - https://www.pvsm.ru -

Каждый раз, когда я начинаю новый проект, происходит один и тот же ритуал: создать папку app, в ней api, services, utils, накидать main.py [1], requirements.txt, .gitignore, README... И так по кругу. Десятки раз.
В какой-то момент я понял, что трачу на это реально ощутимое время — и написал crt: консольную утилиту, которая умеет:
создавать файлы — любое количество, одной командой;
создавать папки — в том числе вложенные структуры любой глубины;
создавать целые проекты по шаблонам — как встроенным, так и своим;
Хочу рассказать, что получилось.
Вместо того чтобы кликать "New Folder" пятнадцать раз подряд, вы пишете что-то вроде:
crt "app<base.py:control.py>:backends<database<models.py>:base.py>"
И получаете:
your_folder/
│
├── app/
│ ├── base.py
│ └── control.py
│
└── backends/
├── database/
│ └── models.py
└── base.py
Синтаксис минималистичный:
: — разделитель файлов и папок в списке;
<> — обозначение папки, внутрь которой можно вложить что угодно, хоть ещё папки.
То есть вся файловая структура описывается одной строкой, без единого клика мышкой.
Если нужно просто накидать пачку файлов — необязательно повторять расширение для каждого:
crt main:test py
your_folder/
│
├── main.py
└── test.py
Удобно, когда создаёшь сразу несколько однотипных файлов.
Вот тут начинается самое интересное. crt умеет не просто создавать файлы, а разворачивать целые проекты по шаблонам — как своим, так и встроенным.
Посмотреть, что уже есть под рукой:
crt -v
--->
Available templates:
Default:
• postgres (12 files)
• fastapi (24 files)
• react (71 files)
• tg_bot (19 files)
• tg_bot_full (96 files)
• gitignore (py, js, java, c, c++, go, c#)
Применить шаблон — одна команда:
crt -t fastapi -f
Флаг -f означает, что файлы будут не пустыми файлами, а сразу с заполненным базовым содержимым — рабочий скелет проекта, готовый к правке, а не куча пустых файлов, которые ещё предстоит наполнять.
Шаблоны можно не только использовать, но и создавать из своих же проектов. Понравилась структура вашего FastAPI или связки Telegram-бота? Превратите её в шаблон одной командой:
crt -t my_template -a -p my_project
Флаг -a означает append, что шаблон нужно добавить, а флаг -p означает path - путь где храниться проект, можно не указывать тогда crt возьмёт текущую директорию, где открыт терминал.
Дальше этот шаблон можно переименовать:
crt -t my_template -rn my_temp
Или удалить, если он больше не нужен:
crt -t my_template -rm
Если в шаблоне есть файлы и папки, которые тащить не нужно (виртуальные окружения, кэши, логи), можно завести .crtignore в корне проекта — по аналогии с .gitignore:
__pycache__
.venv
venv
.git
.env
.DS_Store
Thumbs.db
.crtignore
Отдельная приятная мелочь — генерация .gitignore под конкретный стек:
crt -t gitignore py
crt -t gitignore js
crt -t gitignore go
Поддерживаются Python, JavaScript/Node.js, Java, C, C++, C# и Go. Мелочь, а неприятную рутину закрывает полностью.
Всё как обычно:
pip install crtfiles
И сразу можно пользоваться — никакой дополнительной настройки не требуется.
PyPI: https://pypi.org/project/crtfiles [2]
GitHub: https://github.com/feed619/crtfiles [3]
Тем, кто часто запускает новые проекты и устал вручную копировать структуру папок и файлы.
Тем, у кого есть своя «коронная» архитектура, и кто хочет разворачивать её одной командой.
Я продолжаю дорабатывать инструмент и открыт к любым идеям и репортам о багах.
Также в планах — возможность развернуть свой сервер, куда можно будет загружать собственные шаблоны проектов и скачивать шаблоны, которые выложили другие пользователи.
Отдельно: если у вас есть качественный шаблон проекта, которым не жалко поделиться, — с радостью добавлю его в список встроенных. Просто пришлите ссылку на GitHub.
Автор: feed619
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/456068
Ссылки в тексте:
[1] main.py: http://main.py
[2] https://pypi.org/project/crtfiles: https://pypi.org/project/crtfiles
[3] https://github.com/feed619/crtfiles: https://github.com/feed619/crtfiles
[4] Источник: https://habr.com/ru/articles/1066782/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1066782
Нажмите здесь для печати.