skip to navigation
skip to content

flake8 2.0

the modular source code checker: pep8, pyflakes and co

Latest Version: 3.5.0

Flake8 is a wrapper around these tools:

  • PyFlakes
  • pep8
  • Ned Batchelder’s McCabe script

Flake8 runs all the tools by launching the single flake8 script. It displays the warnings in a per-file, merged output.

It also adds a few features:

  • files that contain this line are skipped:

    # flake8: noqa
  • lines that contain a # noqa comment at the end will not issue warnings.

  • a Git and a Mercurial hook.

  • a McCabe complexity checker.

  • extendable through flake8.extension entry points.


pip install flake8

To run flake8 just invoke it against any directory or Python module:

$ flake8 coolproject
coolproject/ F401 'shutil' imported but unused
coolproject/ E225 missing whitespace around operato
coolproject/ F811 redefinition of function 'readlines' from line 723
coolproject/ F841 local variable 'errors' is assigned to but never used

The outputs of PyFlakes and pep8 (and the optional plugins) are merged and returned.

flake8 offers an extra option: –max-complexity, which will emit a warning if the McCabe complexity of a function is higher than the value. By default it’s deactivated:

$ flake8 --max-complexity 12 coolproject
coolproject/ F401 'shutil' imported but unused
coolproject/ E225 missing whitespace around operator
coolproject/ F811 redefinition of unused 'readlines' from line 723
coolproject/ C901 'Checker.check_all' is too complex (12)
coolproject/ F841 local variable 'errors' is assigned to but never used
coolproject/ C901 'selftest' is too complex (14)

This feature is quite useful to detect over-complex code. According to McCabe, anything that goes beyond 10 is too complex. See


2.0.0 - 2013-02-23

  • Pyflakes errors are prefixed by an F instead of an E
  • McCabe complexity warnings are prefixed by a C instead of a W
  • Flake8 supports extensions through entry points
  • Due to the above support, we require setuptools
  • We publish the documentation
  • Fixes #13: pep8, pyflakes and mccabe become external dependencies
  • Split into, and for better logic
  • Expose our parser for our users
  • New feature: Install git and hg hooks automagically
  • By relying on pyflakes (0.6.1), we also fixed #45 and #35

1.7.0 - 2012-12-21

  • Fixes part of #35: Exception for no WITHITEM being an attribute of Checker for Python 3.3
  • Support stdin
  • Incorporate @phd’s builtins pull request
  • Fix the git hook
  • Update to the latest version

1.6.2 - 2012-11-25

  • fixed the NameError: global name ‘message’ is not defined (#46)

1.6.1 - 2012-11-24

  • fixed the mercurial hook, a change from a previous patch was not properly applied
  • fixed an assumption about warnings/error messages that caused an exception to be thrown when McCabe is used

1.6 - 2012-11-16

  • changed the signatures of the check_file function in flake8/, skip_warning in flake8/ and the check, checkPath functions in flake8/
  • fix --exclude and --ignore command flags (#14, #19)
  • fix the git hook that wasn’t catching files not already added to the index (#29)
  • pre-emptively includes the addition to pep8 to ignore certain lines. Add # nopep8 to the end of a line to ignore it. (#37)
  • check_file can now be used without any special prior setup (#21)
  • unpacking exceptions will no longer cause an exception (#20)
  • fixed crash on non-existent file (#38)

1.5 - 2012-10-13

  • fixed the stdin
  • make sure mccabe catches the syntax errors as warnings
  • pep8 upgrade
  • added max_line_length default value
  • added Flake8Command and entry points is setuptools is around
  • using the setuptools console wrapper when available

1.4 - 2012-07-12

  • git_hook: Only check staged changes for compliance
  • use pep8 1.2

1.3.1 - 2012-05-19

  • fixed support for Python 2.5

1.3 - 2012-03-12

  • fixed false W402 warning on exception blocks.

1.2 - 2012-02-12

  • added a git hook
  • now Python 3 compatible
  • mccabe and pyflakes have warning codes like pep8 now

1.1 - 2012-02-14

  • fixed the value returned by –version
  • allow the flake8: header to be more generic
  • fixed the “hg hook raises ‘physical lines’” bug
  • allow three argument form of raise
  • now uses setuptools if available, for ‘develop’ command

1.0 - 2011-11-29

  • Deactivates by default the complexity checker
  • Introduces the complexity option in the HG hook and the command line.

0.9 - 2011-11-09

  • update pep8 version to 0.6.1
  • mccabe check: gracefully handle compile failure

0.8 - 2011-02-27

  • fixed hg hook
  • discard unexisting files on hook check

0.7 - 2010-02-18

  • Fix pep8 initialization when run through Hg
  • Make pep8 short options work when run through the command line
  • Skip duplicates when controlling files via Hg

0.6 - 2010-02-15

  • Fix the McCabe metric on some loops
File Type Py Version Uploaded on Size
flake8-2.0.tar.gz (md5) Source 2013-02-23 10KB