Skip to main content

A library for rendering projects templates

Project description

Copier

A library for rendering projects templates.

  • Works with local paths and git URLs.
  • Your project can include any file and Copier can dynamically replace values in any kind of text files.
  • It generates a beautiful output and take care of not overwrite existing files, unless instructed to do so.

Sample output

How to use

  • Use it in your Python code:
from copier import copy

# Create a project from a local path
copy('path/to/project/template', 'path/to/destination')

# Or from a git URL.
copy('https://github.com/jpscaletti/copier.git', 'path/to/destination')

# You can also use "gh:" as a shortcut of "https://github.com/"
copy('gh:jpscaletti/copier.git', 'path/to/destination')

# Or "gl:"  as a shortcut of "https://gitlab.com/"
copy('gl:jpscaletti/copier.git', 'path/to/destination')
  • Or as a command-line tool:
copier path/to/project/template path/to/destination

How it works

The content of the files inside the project template are copied to the destination without changes, unless are suffixed with the extension '.tmpl'. In that case, the templating engine will be used to render them.

A slightly customized Jinja2 templating is used. The main difference is that variables are referenced with [[ name ]] instead of {{ name }} and blocks are [% if name %] instead of {% if name %}. To read more about templating see the Jinja2 documentation.

If a YAML file named copier.yml is found in the root of the project (alternatively, a TOML file named copier.toml, or a JSON file named copier.json), the user will be prompted to fill or confirm the values.

Use the data argument to pass whatever extra context you want to be available in the templates. The arguments can be any valid Python value, even a function.

The copier.yml file

If a copier.yml, copier.toml, or copier.json file is found in the root of the project, it will be read and used for two purposes:

Prompt the user for information

For each key found, Copier will prompt the user to fill or confirm the values before they become avaliable to the project template. So a content like this:

--- 
name_of_the_project: My awesome project
number_of_eels: 1234
your_email: ""

will result in this series of questions:

   name_of_the_project? [My awesome project]
   your_email? [] myemail@gmail.com
   number_of_eels? [1234] 42

Arguments defaults

The keys _exclude, _include and _tasks in the copier.yml file, will be treated as the default values for the exclude, include, and tasks arguments to copier.copy().

Note that they become just the default, so any explicitely-passed argument will overwrite them.

---
# Shell-style patterns files/folders that must not be copied.
_exclude:
  - "*.bar"

# Shell-style patterns files/folders that *must be* copied, even if
# they are in the exclude list
_include:
  - "foo.bar"

# Commands to be executed after the copy
_tasks:
  - "git init"
  - "rm [[ name_of_the_project ]]/README.md"

Warning: Use only trusted project templates as these tasks run with the same level of access as your user.


API

copier.copy()

copier.copy(src_path, dst_path, data=None, *, exclude=DEFAULT_FILTER, include=DEFAULT_INCLUDE, envops=None, pretend=False, force=False, skip=False, quiet=False, )

Uses the template in src_path to generate a new project at dst_path.

Arguments:

  • src_path (str): Absolute path to the project skeleton. May be a version control system URL

  • dst_path (str): Absolute path to where to render the skeleton

  • extra_paths (list): Optional. Additional directories to find parent templates in

  • data (dict): Optional. Data to be passed to the templates in addtion to the user data from a copier.yml.

  • exclude (list): Optional. A list of names or shell-style patterns matching files or folders that mus not be copied.

  • include (list): Optional. A list of names or shell-style patterns matching files or folders that must be included, even if its name are in the exclude list. Eg: ['.gitignore']. The default is an empty list.

  • tasks (list): Optional lists of commands to run in order after finishing the copy. Like in the templates files, you can use variables on the commands that will be replaced by the real values before running the command. If one of the commands fail, the rest of them will not run.

  • envops (dict): Optional. Extra options for the Jinja template environment.

  • pretend (bool): Optional. Run but do not make any changes

  • force (bool): Optional. Overwrite files that already exist, without asking

  • skip (bool): Optional. Skip files that already exist, without asking

  • quiet (bool): Optional. Suppress the status output

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Copier-2.4.0.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

Copier-2.4.0-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file Copier-2.4.0.tar.gz.

File metadata

  • Download URL: Copier-2.4.0.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for Copier-2.4.0.tar.gz
Algorithm Hash digest
SHA256 3a8161a5b813508cfb9c143ab0298757327bad8afddf0b8346208bd1464faefd
MD5 de877c77652d18a949d4c6d29c8e87b5
BLAKE2b-256 6eb3d73f7dc055073221b5cf2ea6c23c9f337d77f0fb901e67bd35d5361a4075

See more details on using hashes here.

File details

Details for the file Copier-2.4.0-py3-none-any.whl.

File metadata

  • Download URL: Copier-2.4.0-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for Copier-2.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a1838d24c3f310704a8dc2ee4aff76248f0cf5140d7bcdda37b529d1f1a6b604
MD5 fc420f8dab9bf824d4bd33aaae833c42
BLAKE2b-256 bff4676645392d67cac678e5cca0e9677d2c171a4d5c55a2809ce99fe0fb6865

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page