Spend less time setting up and configuring your new Python packages and comply with the Netherlands eScience Center Software Development Guide from the start.
Use this Cookiecutter template to generate an empty Python package. Features include:
-
Boilerplate tests and documentation,
-
Open source software license,
-
Default Github actions for building, testing and deployment
-
Code style checking,
-
Miscellaneous files, such as Change log, Code of Conduct, and Contributing guidelines,
-
A README and a separate document with extensive documentation about project setup.
The file structure of the generated package looks like:
path/to/package/
├── .editorconfig
└── .github/
└── workflows
├── build.yml
└── pypi_deploy.yml
├── .gitignore
├── .prospector.yml
├── CHANGELOG.rst
├── CODE_OF_CONDUCT.rst
├── CONTRIBUTING.rst
├── docs
│ ├── conf.py
│ ├── index.rst
│ └── ...
├── LICENSE
├── MANIFEST.in
├── NOTICE
├── package
│ ├── __init__.py
│ ├── __version__.py
│ └── package.py
├── README.rst
├── project_setup.rst
├── requirements.txt
├── setup.cfg
├── setup.py
└── tests
├── __init__.py
├── test_lint.py
└── test_package.py
- Code (existing or new) should be placed in
path/to/package/package/
(please choose a better name for your software!). - Add documentation by editing
path/to/package/docs/index.rst
- Tests go in the
path/to/package/tests/
directory - The generated project setup document contains extensive documentation about the project setup and provides further instructions on what to do.
We recommend developing your software in an isolated Python environment and assume you are familiar with either virtualenv + pip or conda (check the guide if you are not).
We recommend installing cookiecutter outside the virtual environment you will be using for developing your software. This way, you don't have to install cookiecutter for every new project.
-
If you are using virtualenv + pip:
pip install --user cookiecutter
-
If you are using conda:
conda install -c conda-forge cookiecutter
To create a new package, type:
cookiecutter https://github.com/nlesc/python-template.git
You will be asked to supply the following information:
Name | Default value | Explanation |
---|---|---|
project_name | My Python Project | Full project/package name. |
project_slug | my_python_project | This will be the name of the directory to be created and the git repository. It is safest not to use dashes (-) or spaces in this name. |
project_short_description | The information that you enter here will end up in the README, documentation, license, and setup.py, so it may be a good idea to prepare something in advance. | |
version | 0.1.0 | |
github_organization | GitHub organization that will contain this project's repository. This can also be your github user name. | |
open_source_license | Apache 2.0 (1) | The software license under which the code is made available. |
apidoc | no (1) | Add support for automatically generating a module index from the docstrings in your Python package (look at the scriptcwl package for an example). |
full_name | John Smith | Your full name, e.g. John Smith. |
[email protected] | Your (work) email address | |
copyright_holder | Name(s) of the organization(s) or person(s) who hold the copyright of the software (e.g., Netherlands eScience Center). | |
code_of_conduct_email | [email protected] | Email address of the person who should be contacted in case of violations of the Code of Conduct. |
- If you are using virtualenv + pip, do:
$ virtualenv -p python3 env $ . env/bin/activate
- If you are using conda, type:
(On windows use
$ conda create -n env python=3 $ source activate env
activate env
to activate the conda environment.)
The template has two Ci workflows. They can be found in .github/workflows folder.
- build.yml
This workflow install the dependencies, builds the package and runs tests.
- pypi.yml
This workflow pushes the package to PYPI. This action will require PYPI token to be stored as Github secret. The workflow uses secret with a name of PYPI_TOKEN
.
You can learn more about Python packaging at this link.
Suggestions/improvements/edits are most welcome. Please read the contribution guidelines before creating an issue or a pull request.