1
0
Fork 0
A basic Python project template using pyproject.toml, wiith unit tests and CI.
Go to file Use this template
Jack Hadrill 53b7c05b07 Initial commit 2022-08-31 00:56:19 +01:00
src/foobar Initial commit 2022-08-31 00:56:19 +01:00
tests Initial commit 2022-08-31 00:56:19 +01:00
.drone.yml Initial commit 2022-08-31 00:56:19 +01:00
.flake8 Initial commit 2022-08-31 00:56:19 +01:00
.gitignore Initial commit 2022-08-31 00:56:19 +01:00
.pylintrc Initial commit 2022-08-31 00:56:19 +01:00
LICENSE Initial commit 2022-08-31 00:56:19 +01:00
README.md Initial commit 2022-08-31 00:56:19 +01:00
pyproject.toml Initial commit 2022-08-31 00:56:19 +01:00
setup.cfg Initial commit 2022-08-31 00:56:19 +01:00
setup.py Initial commit 2022-08-31 00:56:19 +01:00

README.md

Python Template

This is a basic Python template which uses the new pyproject.toml in conjunction with setup.cfg (and legacy support for older Python versions with setup.py).

It contains pylint and flake8 rules for an increased line length of 120 characters, in addition to support for unit tests and CI via Drone.

Development

The package should be located in a subdirectory within src/. For example, src/foobar/.

This directory should contain an __init__.py and a __main__.py, the latter of which allows this package to be called as a Python module.

To install an editable version (such that you don't need to keep re-installing), create a new virtual environment and use pip's editable flag.

$ python -m venv venv
$ . venv/bin/activate
(venv)$ pip install -e .

Lint

Pylint and flake8 rules can be found in .pylintrc and .flake8 respectively. By default, the default rulesets are followed with overrides specified in these files.

To install, use the following command:

(venv)$ pip install -e '.[lint]'

To run, use the following commands:

(venv)$ flake8 src
(venv)$ pylint src

It should be noted that flake8 is much quicker than pylint, so should run first when used in a CI pipeline.

Test

This package is setup to support Python unittest and pytest, although in practice I've only really used it with pytest.

To install the test dependencies, issue the following command:

(venv)$ pip install -e '.[test]'

To run the tests, run the following command:

(venv)$ pytest

Tests should be stored in the test/ directory.

Build

To build a wheel for this package, use the following commands:

(venv)$ pip install --no-cache-dir build
(venv)$ python -m build --wheel

This will output a wheel to the dist/ directory.

Installation

Installation can be performed from source or using the previously built wheel.

Source

To install from source, navigate to the root directory and run the following command:

(venv)$ pip install .

Wheel

To install using the wheel, run the following command:

(venv)$ pip install dist/foobar*.whl

Running

The [project.scripts] directive in pyproject.toml lists the commands which should be installed as part of this package. The included example runs the main() function in __main__.py, and allows for the user to run the package with the following command:

(venv)$ foobar
Hello, World!
42

Alternatively, because __main__.py was used, the user can achieve the same by using the following:

(venv)$ python -m foobar
Hello, World!
42