
Каждый раз, когда я начинаю новый проект, происходит один и тот же ритуал: создать папку app, в ней api, services, utils, накидать main.py, 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
Если в шаблоне есть файлы и папки, которые тащить не нужно (виртуальные окружения, кэши, логи), можно завести .crtignore в корне проекта — по аналогии с .gitignore:
__pycache__.venvvenv.git.env.DS_StoreThumbs.db.crtignore
.gitignore одной командой
Отдельная приятная мелочь — генерация .gitignore под конкретный стек:
crt -t gitignore pycrt -t gitignore jscrt -t gitignore go
Поддерживаются Python, JavaScript/Node.js, Java, C, C++, C# и Go. Мелочь, а неприятную рутину закрывает полностью.
Установка
Всё как обычно:
pip install crtfiles
И сразу можно пользоваться — никакой дополнительной настройки не требуется.
Ссылки на проект:
Кому это может пригодиться
-
Тем, кто часто запускает новые проекты и устал вручную копировать структуру папок и файлы.
-
Тем, у кого есть своя «коронная» архитектура, и кто хочет разворачивать её одной командой.
Что дальше
Я продолжаю дорабатывать инструмент и открыт к любым идеям и репортам о багах.
Также в планах — возможность развернуть свой сервер, куда можно будет загружать собственные шаблоны проектов и скачивать шаблоны, которые выложили другие пользователи.
Отдельно: если у вас есть качественный шаблон проекта, которым не жалко поделиться, — с радостью добавлю его в список встроенных. Просто пришлите ссылку на GitHub.
ссылка на оригинал статьи https://habr.com/ru/articles/1066782/