You can define custom test enviroments with [testenv:<name>]
Tox understand references to other sections: {[testdeps]deps}
Type hinting is very useful to do static analysis (with mypy, for example).
Each environment in envlist will use the [testenv] configuration as a base.
If we pass an environment name that is not listed in envlist
(let us say myenv) tox will solely use the configuration variables presented
in [testenv:myenv]; if myenv is also listed in envlist, then both
configurations, the one of [testenv] and the one of [testenv:myenv] will be merged.
Preference will be given for variables in [testenv:myenv] in case of conflict.
When setting the mypy configuration at [mypy] in setup.cfg, set
the python version as the lowest one your package supports.
If you want to extend the mypy functionalities to the consumers of your
package, for example if they are passing the right type as arguments
to your package function, you should add the file py.typed in your package.
Don't forget to use an expression in MANIFEST.in that covers the exportation
of this file.
Code formatting with black.
Use parameter skip_install if the task tox is going to run does not need
your package to be installed.
Use flake8 for lint. It also has a plugin architecture. Some functionalities
are only available if the corresponding plugin is installed.