Welcome, guest | Sign In | My Account | Store | Cart

Notice! PyPM is being replaced with the ActiveState Platform, which enhances PyPM’s build and deploy capabilities. Create your free Platform account to download ActivePython or customize Python with the packages you require and get automatic updates.


flake8 is unavailable in PyPM, because there aren't any builds for it in the package repositories. Click the linked icons to find out why.

 Python 2.7Python 3.2Python 3.3
Windows (32-bit) Failed View build log
Windows (64-bit) Failed View build log
Mac OS X (10.5+) Failed View build log
Linux (32-bit) Failed View build log
Linux (64-bit) Failed View build log
Lastest release
version 2.0 on Mar 4th, 2013

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/mod.py:97:1: F401 'shutil' imported but unused
coolproject/mod.py:625:17: E225 missing whitespace around operato
coolproject/mod.py:729:1: F811 redefinition of function 'readlines' from line 723
coolproject/mod.py:1028:1: 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/mod.py:97:1: F401 'shutil' imported but unused
coolproject/mod.py:625:17: E225 missing whitespace around operator
coolproject/mod.py:729:1: F811 redefinition of unused 'readlines' from line 723
coolproject/mod.py:939:1: C901 'Checker.check_all' is too complex (12)
coolproject/mod.py:1028:1: F841 local variable 'errors' is assigned to but never used
coolproject/mod.py:1204:1: 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 https://en.wikipedia.org/wiki/Cyclomatic_complexity.


2.0.0 - 2013-02-xx
  • 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 run.py into main.py, engine.py and hooks.py 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 pep8.py 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/run.py, skip_warning in flake8/util.py and the check, checkPath functions in flake8/pyflakes.py.
  • 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

Subscribe to package updates

Last updated Mar 4th, 2013

Download Stats

Last month:1

What does the lock icon mean?

Builds marked with a lock icon are only available via PyPM to users with a current ActivePython Business Edition subscription.

Need custom builds or support?

ActivePython Enterprise Edition guarantees priority access to technical support, indemnification, expert consulting and quality-assured language builds.

Plan on re-distributing ActivePython?

Get re-distribution rights and eliminate legal risks with ActivePython OEM Edition.