How to install flake8
- Download and install ActivePython
- Open Command Prompt
- Type
pypm install flake8
Depended by
- attowiki
- collective.downloadtracker
- collective.purge_behaviors
- django-akismet-comments
- facio
- flake8-docstrings
- Gaea
- hacking
- jack-bower
- leeroy
- mocket
- MoPyTools
- mr.bob
- mr.poe
- niteoweb.aweber
- niteoweb.ipn.core
- niteoweb.ipn.jvzoo
- plone.api
- plone.app.hud
- plone.hud
- plone.recipe.codeanalysis
- pykss
- pyppi
- pyquality
- pyramid_tinymce_spellchecker
- raven
- redturtle.gritterize
- rest-api-blueprint
- sentry
- sphinx-intl
- tiddlywebplugins.mapuser
- Worklog
- xmlpylighter
Lastest release
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.
QuickStart
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.
CHANGES
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