PEP8 suggests that:
Imports should be grouped in the following order:
- standard library imports
- related third party imports
Update (2016): sbywater has the most recent answer.
Found it! (accidentally, while reading "Hacker's guide to python")
OpenStack Hacking Style Checks project named hacking introduces several unique flake8 extensions. There is hacking_import_groups among them (related commit).
Example:
requirements
hacking (from the master branch):
$ git clone https://github.com/openstack-dev/hacking.git
$ cd hacking/
$ python setup.py install
files used in the example
tox.ini
(we need to tell flake8 that we want to use a custom check)
[hacking]
local-check = hacking.core.hacking_import_groups
UPD: with the newest version of hacking
the path to the check changed, now it is hacking.checks.imports.hacking_import_groups
.
test.py
(target of the check)
import requests
import sys
from my_module import print_smth
print_smth(requests.get('https://google.com'))
print_smth(sys.version)
my_module.py
(local import used by test.py
)
def print_smth(smth):
print smth
Then, if I run flake8
against test.py
:
$ flake8 test.py
test.py:2:1: H305 imports not grouped correctly (requests: third-party, sys: stdlib)
test.py:3:1: H305 imports not grouped correctly (sys: stdlib, my_module.print_smth: project)
test.py:3:1: H306 imports not in alphabetical order (sys, my_module.print_smth)
Then, if I group the imports in the correct order following PEP8
:
import sys
import requests
from my_module import print_smth
print_smth(requests.get('https://google.com'))
print_smth(sys.version)
No warnings found:
$ flake8 test.py
$
Hope this will help somebody in the future.