Flake8 tool to check python source code

Flake8 is a wrapper around several tools:

  • PyFlakes:
  • check source files for errors.
  • pycodestyle:
  • check source code against PEP8 conventions.
  • Ned Batchelder’s McCabe script:
  • perform McCabe complexity check.


Source code in GitLab repo:
https://gitlab.com/pycqa/flake8



Flake8 documentation:
https://flake8.pycqa.org/en/latest/index.html

Flake8 quickstart:
https://flake8.pycqa.org/en/latest/index.html#quickstart



https://pypi.org/project/flake8/

Install flake8 using pip installer:
$ pip install flake8


Show help:

https://flake8.pycqa.org/en/latest/user/options.html

$ flake8 --help
usage: flake8 [options] file file ...

positional arguments:
filename

optional arguments:
-h, --help show this help message and exit
-v, --verbose Print more information about what is happening in flake8. This option is repeatable and will increase verbosity each time it is repeated.
--output-file OUTPUT_FILE




Execute flake8 to test one or several files:

$ flake8 main.py

$ flake8 main.py database.py


or for the whole project in current directory:

$ flake8 .
./main.py:18:1: F401 'wtforms.StringField' imported but unused
./main.py:186:13: F821 undefined name 'l'
./main.py:327:9: F841 local variable 'save' is assigned to but never used
./database.py:5:1: F401 'logging' imported but unused
./database.py:8:1: F401 'logging.warning as lwarn' imported but unused
./database.py:10:1: F401 'logging.exception as lexcept' imported but unused



Check for several specific errors or warnings:
$ flake8 --select E303,E501 main.py
main.py:5:80: E501 line too long (92 > 79 characters)
main.py:6:80: E501 line too long (94 > 79 characters)



Ignore several warnings or errors:
$ flake8 --ignore E501 main.py



We can create a configuration file (using INI format):
https://flake8.pycqa.org/en/latest/user/configuration.html
https://flake8.pycqa.org/en/latest/user/options.html#options-list
https://flake8.pycqa.org/en/latest/user/options.html#cmdoption-flake8-select

E.g: .flake8 in the project directory:

[flake8]
ignore = E501,E303

select = E,W

exclude = .git,
          __pycache__,
	  main.py

max-line-length = 100

max-complexity = 10



We can execute $ flake8 and it will read options from config file .flake8

Command line options override configuration file ones.