A flake8 plugin used to disallow certain forms of imports.
This plugin talks about the import syntax (import X.Y.Z [as foo])
and the from syntax (from X.Y import Z [as foo]). It talks about
import segments (import X), from segments (from Y), and as
segments (as Z).
For every error IMR2xx listed below, there are options --imr2xx_include and --imr2xx_exclude
which are passed a comma separated list of UNIX wildcard patterns each. The error
will then only be reported on imports of modules that match a include pattern but no exclude
pattern.
By default, IMR200, IMR201, IMR202, IMR221, IMR223, IMR241, and IMR243 include all (*) modules. Only IMR241 excludes the
typing module from checks, the other errors have no excludes by default.
Imports should only happen on module level, not locally.
# Bad
def f():
import os.path
return os.path.join("a", "b")
# Good
import os.path
def f():
return os.path.join("a", "b")Alias identifiers defined from as segments should be at
least two characters long.
# Bad
import os.path as p
# Good
import os.path as pathAlias identifiers should not have the same name as the imported object.
# Bad
import sys as sys
# Good
import sysWhen using the import syntax, if the imported module is a submodule,
i.e. not a top level module, an as segment should be present.
# Bad
import os.path
# Good
import sys
import os.path as pathWhen using the import syntax, each import statement should
only import one module.
# Bad
import sys, os
# Good
import sys
import osThe import syntax should not be used.
When using the import syntax, do not duplicate module names in the as
segment.
# Bad
import os.path as path
# Good
from os import path
import os.path as ospathWhen using the from syntax, the import segment only contains one
import.
# Bad
from os import path, environ
# Good
from os import path
from os import environWhen using the from syntax, only submodules are imported, not
module elements.
# Bad
from os.path import join
# Good
from os import pathWhen using the from syntax, only module elements are imported,
not submodules.
# Bad
from os import path
# Good
from os.path import joinWhen using the from syntax, import * should not be used.
# Bad
from os.path import *
# Good
from os.path import joinRelative imports should not be used.
# Bad
from . import foo
# Good
from flake8_import_restrictions import fooThe from syntax should not be used.