/poetry-copier

A copier template for scaffolding Python packages and apps (FastAPI and Gradio) using Poetry as package manager

Primary LanguageJinjaGNU Affero General Public License v3.0AGPL-3.0

License: GNU Affero General Public License v3.0 CI GitHub Repo stars

Poetry Copier

A copier template for scaffolding Python packages and apps (FastAPI and Gradio) using Poetry as package manager and Development Containers as reproducible development environment.

This template is a loose port of the Radix Poetry Cookiecutter and comes with the same LICENSE.

๐Ÿ’ป Demo

Check out the following demos for examples of scaffolded projects using this template:

๐ŸŽ‰ Features

๐Ÿš€ Using

  1. Install the latest copier in your Python environment (please use python>=3.8):
    pip install "copier>=9.2.0"
  2. Create a new repository and clone it locally.
  3. Run copier in your cloned directory:
    copier copy --vcs-ref=v0.3.1 git@github.com:lukin0110/poetry-copier.git .

Updating a project

copier update --vcs-ref=HEAD --defaults

More information on how to update a project and resolve conflicts can be found in the Copier documentation.

๐Ÿ’ญ Rationale

This template aims to provide a minimal, but fully functional, project structure for any python project. Focus on what matters: coding!

Setting up a project can be tedious and requires a lot of "plumbing" to get CI/CD right, to get pyproject.toml right, to get the Dockerfile right, etc.

The use of Docker in conjunction with Development Containers are key in this template to provide a smooth development experience. It's possible to develop without a Development Container and use Poetry with virtual environments straight away, however this template is optimized to provide a working development environment with development containers.

Note

This template is not a good fit if you don't want to work with Docker and/or Development Containers.

๐ŸŽฏ Goals

  • Reduce project setup
  • Provide dev/prod parity
  • IDE idependent. However, with a strong focus on VSCode since it integrates nicely with GitHub, Development Containers and GitHub Copilot
  • Provide a minimal workable setup
  • Don't enforce application or package architecture
  • Include the usual suspects of every project: CI/CD, linting, testing, package manager, development container, etc

๐Ÿ‘ท๐Ÿผ Troubleshooting: docs/troubleshooting.md

๐ŸŽจ Technical design: docs/design.md

๐Ÿ› ๏ธ Open an issue if you have any questions or suggestions