Cookiecutter python
Теги: templating
Cookiecutter создает проекты из cookiecutter шаблонов проектов, например, проекты пакетов Python из шаблонов пакетов Python 3.7, 3.8, 3.9., 3.10
Install
python3 -m pip install --user cookiecutter
Usage
Сколнировать репозиторий шаблона и поправить cookiecutter.json
- можно устаревший на базе python 3.6-3.8 и setup.py:
git clone git@github.com:audreyr/cookiecutter-pypackage.git
(ссылка). Документация - можно с [poetry], [github-action] и precommit:
git clone git@github.com:fpgmaas/cookiecutter-poetry.git
(ссылка). Документация.
Сгенерировать проект из шаблона (опции командной строки тут):
cookiecutter cookiecutter-pypackage/
или можно напрямую сгенерировать зи репо cookiecutter git@github.com:fpgmaas/cookiecutter-poetry.git
. Источниками шаблонов могут быть открытые или приватные репозитории, а так-же зазипованыне файлы.
Преокт создается из файлов каталога `` с соответствующей подстановкой переменныхопределенных в cookiecutter.json
с помощью пользовательского ввода.
Advanced Usage
- Using Pre/Post-Generate Hooks запускает питоньи скрипты непосредственно перед и после сборки из шблона. Повзояляе контрллировать пространство файлов проекта.
- User Config. Если вы часто используете Cookiecutter, вам будет полезно иметь файл конфигурации пользователя. По умолчанию Cookiecutter пытается получить настройки из файла
.cookiecutterrc
в вашем домашнем каталоге. - Calling Cookiecutter Functions From Python. Это полезно, если, например, вы пишете веб-фреймворк и вам нужно предоставить разработчикам инструмент, похожий на django-admin.py startproject или npm init.
- Injecting Extra Context
- Suppressing Command-Line Prompts
- Templates in Context Values. Значения (но не ключи) файла
cookiecutter.json
также могут являться шаблонами [Jinja2]. Значения из подсказок пользователя добавляются в контекст немедленно, так что одно значение контекста может быть получено из предыдущих значений. Этот подход потенциально может сэкономить пользователю много нажатий клавиш, предоставляя более разумные значения по умолчанию. - Private Variables. Cookiecutter позволяет определять частные переменные, добавляя подчеркивание к имени переменной. Пользователю не требуется заполнять эти переменные. Они могут либо не отображаться с использованием предваряющего символа подчеркивания, либо визуализироваться с добавлением двойного подчеркивания.
- Copy without Render
- Replay Project Generation
- Choice Variables
- Dictionary Variables
- Template Extensions
- Organizing cookiecutters in directories
- Working with line-ends special symbols LF/CRLF
- Local Extensions
More examples
- Create your own Cookiecutter template
- Extending our Cookiecutter template
- Wrapping up our Cookiecutter template
Другие шаблонизаторы
CookieTemple
- Dependency Management
- [poetry]
- Documentation
- Sphinx
- Darglint to manage documentation linting
- Testing
- [pytest]
- Nox for cross platform testing
- Codecoverage.yml for managing coverage
- [github]
- Pull request
- Feature request
- Bug
- [github-action]
- lint
- release
- testing
- publishing package on PyPi
- updating docs
- Dependabot dependency upgrades
- syncs the project with their template updates as well
- Has master branch protection enabled
- Uses Pre-commit to fix everything before you push to GitHub
- [makefile]
- Separate for Windows and Linux
- [docker] Dockerfile
- Very basic, uses alpine Python distribution
- Type checking
- [mypy]
- Security
- Bandit for scanning vulnerabilities
- Other stuff
- [flake8]
- black
- isort
CookieCutter Poetry
- Dependency Management
- [poetry]
- Documentation
- MkDocs with Material Theme
- ❌ No Darglint
- Testing
- [github]
- Pull request
- Feature request
- Bug
- [github-action]
- lint
- release
- testing
- publishing package on PyPi
- updating docs
- ❌ No Dependabot
- ❌ No master branch protection enabled
- ❌ Doesn’t have Pre-Commit
- [makefile]
- ❌ Not separate for Windows and Linux
- [docker] Dockerfile
- ✅ Much better Dockerfile than cookietemple above, highly optimized
- Type checking
- [mypy]
- Security
- ❌ No sign of Bandit here
- Other stuff
- [flake8]
- black
- isort
Wolt Python Package Cookiecutter
- Dependency Management
- [poetry]
- Documentation
- MkDocs Material (Both the above projects had a lot more into their documentation than this one)
- ❌ No Darglint
- ✅ This one has something both of the above ones dont. It is using python-kacl to automatically manage CHANGELOG
- Testing
- [github]
- Pull request
- ❌ No Feature request Template
- ❌ No Bug Template
- [github-action]
- lint
- release
- testing
- publishing package on PyPi
- updating docs
- ❌ No Dependabot for dependency upgrades. Manages them manually which I think is not a good idea.
- ❌ No master branch protection
- Uses Pre-commit to fix everything before you push to GitHub
- ❌ No Makefile
- ❌ No Dockerfile
- Type checking
- [mypy]
- Security
- ❌ No Bandit
- Other stuff
- [flake8]
- black
- isort
- Uses cruft to keep templates automatically upto date
Python Project Template By Rucha Bruno
- Dependency Management
- ✅ Uses setup tools by default but you can switch to [[puetry]] if you want
- Documentation
- MkDocs
- ❌ No sign of Darglint
- ✅ This one also manages CHANGELOG automatically using gitchangelog
- Testing
- [github]
- Pull request
- Feature request
- Bug
- ✅ Adds a funding page too
- [github-action]
- lint
- release
- testing
- publishing package on PyPi
- ❌ Coudnt find where docs are getting updated
- ❌ No sign of dependabot
- ❌ No master branch protection
- ❌ No sign of precommit
- [makefile]
- ❌ Not separate for Windows and Linux
- Containerfile