A generic python project template based on copier
for my data science focused projects.
copier copy --trust --vcs-ref=HEAD git+https://github.com/twsl/python-project-template path/to/destination
- Supports
Python 3.9
and higher. Poetry
as a dependencies manager. See configuration inpyproject.toml
.- Automatic codestyle with
ruff
. - Ready-to-use
pre-commit
hooks with code-formatting. - Type checks with
pyright
. - Security checks with
safety
andbandit
. - Testing with
pytest
. - Ready-to-use
.editorconfig
and.gitignore
. - Ready-to-use
Devcontainer
.
GitHub
integration: Ready-to-use Pull Requests templates and several Issue templatesGithub Actions
with predefined workflows.- Everything is already set up for security checks, codestyle checks, code formatting, testing, linting, docker builds
- Always up-to-date dependencies with
@dependabot
. - Automatic release notes with
Release Drafter
. - Documentation with
MkDocs
.
- Files such as:
LICENSE
,CONTRIBUTING.md
,CODE_OF_CONDUCT.md
, andSECURITY.md
are generated automatically. - Semantic Versions specification with
Release Drafter
.
To begin using the template consider updating copier
:
pip install --upgrade copier
Then, you can copy the template to your destination folder:
copier copy --trust git+https://github.com/twsl/python-project-template path/to/destination --vcs-ref=HEAD
You can update the template in your destination folder with:
copier update --trust path/to/destination --vcs-ref=HEAD
The devcontainer is already set up for you, just open the project in VSCode and you will be prompted to open the project in the devcontainer.
To test the project you can run:
copier copy ./ ./dist --data-file "./.github/assets/.copier-answers.yml" -f --vcs-ref=HEAD
The template uses the following variables to customize the project:
Parameter | Default value |
---|---|
custom_install |
customized |
project_name |
example_project |
project_description |
`` |
primary_branch |
main |
author_username |
`` |
author_email |
{{ author_username }}@users.noreply.github.com |
repository_provider |
github.com |
repository_namespace |
{{ author_username }} |
repository_name |
{{ project_name }} |
copyright_holder |
{{ author_username }} |
copyright_holder_email |
{{ author_email }} |
copyright_year |
2024 |
copyright_license |
MIT |
python_version |
3.11 |
python_package_distribution_name |
{{ project_name }} |
python_package_import_name |
{{ project_name }} |
python_package_command_line_name |
{{ project_name }} |
line_ending |
lf |
use_precommit |
true |
include_docs |
true |
include_notebooks |
true |
include_databricks |
true |
include_copilot |
true |
github_runner_python_version |
3.11 |
github_runner |
ubuntu-latest |
github_runner_onprem |
small |
github_rate_limit |
false |
include_sample_code |
false |
self_signed |
false |
All input values will be saved in the .copier-answers.yml
I just combined multiple templates to create this one, therefore all credits belong to the following projects: