1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
pep8 - Python style guide checker
=================================
pep8 is a tool to check your Python code against some of the style
conventions in `PEP 8`_.
.. _PEP 8: http://www.python.org/dev/peps/pep-0008/
Mailing List
------------
http://groups.google.com/group/pep8
Features
--------
* Plugin architecture: Adding new checks is easy.
* Parseable output: Jump to error location in your editor.
* Small: Just one Python file, requires only stdlib. You can use just
the pep8.py file for this purpose.
* Comes with a comprehensive test suite.
Installation
------------
You can install, upgrade, uninstall pep8.py with these commands::
$ pip install pep8
$ pip install --upgrade pep8
$ pip uninstall pep8
There's also a package for Debian/Ubuntu, but it's not always the
latest version::
$ sudo apt-get install pep8
Example usage and output
------------------------
::
$ pep8 --first optparse.py
optparse.py:69:11: E401 multiple imports on one line
optparse.py:77:1: E302 expected 2 blank lines, found 1
optparse.py:88:5: E301 expected 1 blank line, found 0
optparse.py:222:34: W602 deprecated form of raising exception
optparse.py:347:31: E211 whitespace before '('
optparse.py:357:17: E201 whitespace after '{'
optparse.py:472:29: E221 multiple spaces before operator
optparse.py:544:21: W601 .has_key() is deprecated, use 'in'
You can also make pep8.py show the source code for each error, and
even the relevant text from PEP 8::
$ pep8 --show-source --show-pep8 testsuite/E40.py
testsuite/E40.py:2:10: E401 multiple imports on one line
import os, sys
^
Imports should usually be on separate lines.
Okay: import os\nimport sys
E401: import sys, os
Or you can display how often each error was found::
$ pep8 --statistics -qq Python-2.5/Lib
232 E201 whitespace after '['
599 E202 whitespace before ')'
631 E203 whitespace before ','
842 E211 whitespace before '('
2531 E221 multiple spaces before operator
4473 E301 expected 1 blank line, found 0
4006 E302 expected 2 blank lines, found 1
165 E303 too many blank lines (4)
325 E401 multiple imports on one line
3615 E501 line too long (82 characters)
612 W601 .has_key() is deprecated, use 'in'
1188 W602 deprecated form of raising exception
Quick help is available on the command line::
$ pep8 -h
Usage: pep8 [options] input ...
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-v, --verbose print status messages, or debug with -vv
-q, --quiet report only file names, or nothing with -qq
-r, --repeat (obsolete) show all occurrences of the same error
--first show first occurrence of each error
--exclude=patterns exclude files or directories which match these comma
separated patterns (default: .svn,CVS,.bzr,.hg,.git)
--filename=patterns when parsing directories, only check filenames matching
these comma separated patterns (default: *.py)
--select=errors select errors and warnings (e.g. E,W6)
--ignore=errors skip errors and warnings (e.g. E4,W)
--show-source show source code for each error
--show-pep8 show text of PEP 8 for each error (implies --first)
--statistics count errors and warnings
--count print total number of errors and warnings to standard
error and set exit code to 1 if total is not null
--max-line-length=n set maximum allowed line length (default: 79)
--format=format set the error format [default|pylint|<custom>]
--diff report only lines changed according to the unified diff
received on STDIN
Testing Options:
--testsuite=dir run regression tests from dir
--doctest run doctest on myself
--benchmark measure processing speed
Configuration:
The project options are read from the [pep8] section of the .pep8 file
located in any parent folder of the path(s) being processed. Allowed
options are: exclude, filename, select, ignore, max-line-length,
count, format, quiet, show-pep8, show-source, statistics, verbose.
--config=path config file location (default: /home/user/.config/pep8)
Calling `pep8` from Python
--------------------------
You can also execute `pep8` tests from Python code. For example, this
can be highly useful for automated testing of coding style conformance
in your project::
import unittest
import pep8
class TestCodeFormat(unittest.TestCase):
def test_pep8_conformance(self):
"""Test that we conform to PEP8."""
pep8style = pep8.StyleGuide(quiet=True)
result = pep8style.check_files(['file1.py', 'file2.py'])
self.assertEqual(result.total_errors, 0,
"Found code style errors (and warnings).")
If you are using `nosetests` for running tests, remove `quiet=True`
since Nose suppresses stdout.
There's also a shortcut for checking a single file::
import pep8
fchecker = pep8.Checker('testsuite/E27.py', show_source=True)
file_errors = fchecker.check_all()
print("Found %s errors (and warnings)" % file_errors)
Feedback
--------
Your feedback is more than welcome. Post bugs and feature requests on github:
http://github.com/jcrocholl/pep8/issues
Source download
---------------
.. image:: https://secure.travis-ci.org/jcrocholl/pep8.png?branch=master
:target: https://secure.travis-ci.org/jcrocholl/pep8
:alt: Build status
The source code is currently available on github. Fork away!
http://github.com/jcrocholl/pep8/
Then be sure to pass the tests::
$ python pep8.py --testsuite testsuite
$ python pep8.py --doctest
$ python pep8.py --verbose pep8.py
|