Skip to main content

A flake8 plugin that helps you write tidier imports.

Project description

https://img.shields.io/github/workflow/status/adamchainz/flake8-tidy-imports/CI/master?style=for-the-badge https://img.shields.io/pypi/v/flake8-tidy-imports.svg?style=for-the-badge https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge pre-commit

A flake8 plugin that helps you write tidier imports.

Requirements

Python 3.6 to 3.9 supported.

Installation

First, install with pip:

python -m pip install flake8-tidy-imports

Second, check that flake8 lists the plugin in its version line:

$ flake8 --version
3.7.9 (flake8-tidy-imports: 3.1.0, mccabe: 0.6.1, pycodestyle: 2.5.0, pyflakes: 2.1.1) CPython 3.8.0 on Darwin

Third, add the I25 prefix to your select list. For example, if you have your configuration in setup.cfg:

[flake8]
select = E,F,W,I25

Linting a Django project? Check out my book Speed Up Your Django Tests which covers loads of best practices so you can write faster, more accurate tests.


Options

banned-modules

Config for rule I251 (below). Should contain a map where each line is a banned import string, followed by ‘=’, then the message to use when encountering that import.

There is also a special directive to ban a preselected list of removed/moved modules between Python 2 and Python 3, recommending replacements from six where possible. It can be turned on by adding {python2to3} to the list of banned-modules.

For example in setup.cfg:

[flake8]
banned-modules = mock = Use unittest.mock.
                 {python2to3}

Note that despite the name, you can ban imported objects too, since the syntax is the same. For example:

[flake8]
banned-modules = decimal.Decimal = Use ints and floats only.

ban-relative-imports

When set to ‘true’, enables rule I252 (below), which bans relative imports:

[flake8]
ban-relative-imports = true

(Or, if you want to ban absolute imports, you can put your project’s modules in banned-modules.)

Rules

Note: Before version 4.0.0, the rule codes were numbered 50 lower, e.g. I250 was I200. They were changed in Issue #106 due to conflict with flake8-import-order.

I250: Unnecessary import alias

Complains about unnecessary import aliasing of three forms:

  • import foo as foo -> import foo

  • import foo.bar as bar -> from foo import bar

  • from foo import bar as bar -> from foo import bar

The message includes the suggested rewrite (which may not always be correct), for example:

$ flake8 file.py
file.py:1:1: I250 Unnecessary import alias - rewrite as 'from foo import bar'.

I251: Banned import <import> used.

Complains about use of banned imports. By default there are no imports banned - you should configure them with banned-modules as described above in ‘Options’.

The message includes a user-defined part that comes from the configuration. For example:

$ flake8 file.py
file.py:1:1: I251 Banned import 'mock' used - use unittest.mock instead.

I252: Relative imports are banned.

Complains about use of relative imports:

  • from . import foo

  • from .bar import foo

Needs enabling with ban-relative-imports configuration option.

Absolute imports are recommended by PEP8:

Absolute imports are recommended, as they are usually more readable and tend to be better behaved…

See also

For more advanced control of imports in your project, try import-linter.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flake8-tidy-imports-4.2.1.tar.gz (14.6 kB view details)

Uploaded Source

Built Distribution

flake8_tidy_imports-4.2.1-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file flake8-tidy-imports-4.2.1.tar.gz.

File metadata

  • Download URL: flake8-tidy-imports-4.2.1.tar.gz
  • Upload date:
  • Size: 14.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.9.0

File hashes

Hashes for flake8-tidy-imports-4.2.1.tar.gz
Algorithm Hash digest
SHA256 52e5f2f987d3d5597538d5941153409ebcab571635835b78f522c7bf03ca23bc
MD5 ace9410e6669acd9c082616091b4d0aa
BLAKE2b-256 a6220975f87d8f87bab91ffc4c5061cb22fa3c358fe4792d7fa7d2647d89e032

See more details on using hashes here.

File details

Details for the file flake8_tidy_imports-4.2.1-py3-none-any.whl.

File metadata

  • Download URL: flake8_tidy_imports-4.2.1-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.9.0

File hashes

Hashes for flake8_tidy_imports-4.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 76e36fbbfdc8e3c5017f9a216c2855a298be85bc0631e66777f4e6a07a859dc4
MD5 e5fdbaae22bfa11c0c4e14a2d5fdda8b
BLAKE2b-256 503a61e7d7be71f180127615f98e3f85baeda56c9f5583a50dd3cd280fc23d75

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page