Skip to content

Generating a project

To generate a project, run the following command:

uvx --with copier-templates-extensions copier copy --trust "gh:oedokumaci/python-production-template" /path/to/your/new/project

Questions

The following examples are not up-to-date, they simply illustrate how the template works.

Copier will ask you to answer some questions:

Your project name
project_name? Format: str
🎤 [None]: My Project

The project name can use spaces and capitals. It will be used as the main heading in the README for example.


Your project description
project_description? Format: str
🎤 [None]: My super project!

The project description can be as long as you want, and use any character you want.


Your full name
author_fullname? Format: str
🎤 [None]: Your Name

The full name will appear as "author" in the project's metadata.


Your email
author_email? Format: str
🎤 [your@email.com]: 

The email will appear as "author email" in the project's metadata. It defaults to your git config user.email value.


Your username (e.g. on GitHub)
author_username? Format: str
🎤 [your-username]: 

The username you are using on the git repository provider. It defaults to your git config user.name value.


Your repository provider
repository_provider? Format: str
🎤
(1) github.com
Choice [1]: 

The repository provider on which you plan to store your project. This template only supports GitHub, but the question is left in case we add support for more providers in the future.


Your repository namespace
repository_namespace? Format: str
🎤 [your-username]: 

The namespace (or account) on which the project will be stored. It defaults to the username you provided.


Your repository name
repository_name? Format: str
🎤 [my-project]: 

The repository name on the selected provider. It defaults to a slugified version of your project's name.


The name of the person/entity holding the copyright
copyright_holder? Format: str
🎤 [Your Name]: 

The name of the person or entity holding the copyright on the project. It defaults to the full name your provided.


The email of the person/entity holding the copyright
copyright_holder_email? Format: str
🎤 [your@email.com]: 

The email of the person or entity holding the copyright on the project. It defaults to the email your provided.


The copyright date
copyright_date? Format: str
🎤 [2021]: 

The date to apply to the copyright. It defaults to the current year.


Your project's license
copyright_license? Format: str
🎤
(1) Academic Free License v3.0
(2) Apache License 2.0
(3) Artistic License 2.0
...
(24) MIT License
...
(32) The Unlicense
(33) zlib License
Choice [24]: 

A license from choosealicense.com. It defaults to MIT License.


Your Python package distribution name (for `pip install NAME`)
python_package_distribution_name? Format: str
🎤 [my-project]: 

The name under which your Python package will be distributed. This will be the name of your project on pypi.org for example.


Your Python package import name (for `import NAME` in Python code)
python_package_import_name? Format: str
🎤 [my_project]: 

The name that will be used to import your package in Python code. Yes, distribution name and import name can be different!


Python version for your project
python_version? Format: str
🎤
(1) 3.12
(2) 3.13
(3) 3.14
Choice [2]: 

The Python version to use for your project. It defaults to 3.13.


Include marimo notebooks support for data science workflows
include_notebooks? Format: bool
🎤 [True]: 

Whether to include marimo notebooks support. It defaults to true.

Output

At this point, Copier will generate the project in the specified directory:

    create  pyproject.toml
    create  zensical.toml
    create  .copier-answers.yml
    create  README.md
    create  LICENSE
    create  CONTRIBUTING.md
    create  CHANGELOG.md
    create  CLAUDE.md
    create  .gitignore
    create  tests/
    create  tests/conftest.py
    create  tests/__init__.py
    create  tests/test_main.py
    create  src/
    create  src/my_project/
    create  src/my_project/__init__.py
    create  src/my_project/__main__.py
    create  src/my_project/_internal/
    create  src/my_project/_internal/__init__.py
    create  src/my_project/_internal/cli.py
    create  src/my_project/_internal/debug.py
    create  src/my_project/_internal/logging.py
    create  scripts/
    create  scripts/gen_credits.py
    create  docs/
    create  docs/index.md
    create  docs/contributing.md
    create  docs/changelog.md
    create  docs/css/
    create  docs/css/apidocs.css
    create  config/
    create  config/pytest.ini
    create  config/ruff.toml
    create  config/coverage.ini
    create  .github/
    create  .github/workflows/
    create  .github/workflows/ci.yml
    create  .github/ISSUE_TEMPLATE/
    create  .github/ISSUE_TEMPLATE/1-bug.md
    create  .github/ISSUE_TEMPLATE/2-feature.md

Initialized empty Git repository in /path/to/your/new/project/.git/

Project successfully generated!
Run `uvx --from taskipy task --list` to show the available tasks.

The project includes an initialized git repository. See the next chapter to learn how to work on this new project.

Once the template evolves with new features or fixes, you can pull those changes into your project. See Updating a project for the update command.