1) Install pre-commit
In a Python project you should add the
pre-commit package to your development
Pipfile or whatever you are using).
You can also install it directly via
pip install pre-commit
Check the installation by running
2) Add a config file
Create a file called
.pre-commit-config.yaml in the root directory of your
git repository and add the following content:
repos: - repo: https://github.com/pycqa/pylint rev: pylint-2.6.0 hooks: - id: pylint
3) Install the hook
The following command will install a small script to
.git/hooks which calls
4) Try to commit a file with an issue
Prepare a broken file:
echo "import foobaz" > test.py && git add test.py
When you try to commit this, pylint will fail and stop you from doing the commit.
$ git commit -m "Add test.py" [INFO] Initializing environment for https://github.com/pycqa/pylint. [INFO] Installing environment for https://github.com/pycqa/pylint. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... pylint...................................................................Failed - hook id: pylint - exit code: 22 ************* Module test test.py:1:0: C0114: Missing module docstring (missing-module-docstring) test.py:1:0: E0401: Unable to import 'foobaz' (import-error) test.py:1:0: W0611: Unused import foobaz (unused-import) --------------------------------------------------------------------- Your code has been rated at -60.00/10 (previous run: 2.22/10, -62.22) $ git status --short A test.py
When pre-commit runs for the first time, it installs pylint into a virtualenv
in a special folder in
~/.cache/pre-commit. This installation is reused on
Disable the hook for a commit
Some times you may want to commit a file even though it has an issue. You can disable the
pylint hook by setting a environment variable, e.g. like this:
SKIP=pylint git commit ...
If want to disable all hooks while committing, use the
git commit -n ...
There are dozens of tools that can be run in a pre-commit hook. In my Python
projects I usually have
isort activated. Check out the
Run Pylint automatically on your project
I created a product that runs Pylint and other linters on your Github projects automatically: Please have a look at PyCodeQual.