Skip to main content

Build Status

A flake8 and Pylama plugin that checks the ordering of your imports. It does not check anything else about the imports. Merely that they are grouped and ordered correctly.

In general stdlib comes first, then 3rd party, then local packages, and that each group is individually alphabetized, however this depends on the style used. Flake8-Import-Order supports a number of styles and is extensible allowing for custom styles.

This plugin was originally developed to match the style preferences of the cryptography project, with this style remaining the default.

Warnings

This package adds 4 new flake8 warnings

  • I100: Your import statements are in the wrong order.

  • I101: The names in your from import are in the wrong order.

  • I201: Missing newline between import groups.

  • I202: Additional newline in a group of imports.

Styles

The following styles are directly supported,

  • cryptography - see an example

  • google - style described in Google Style Guidelines, see an example

  • smarkets - style as google only with import statements before from X import … statements, see an example

  • appnexus - style as google only with import statements for packages local to your company or organisation coming after import statements for third-party packages, see an example

  • edited - see an example

  • pycharm - style as smarkets only with case sensitive sorting imported names

  • pep8 - style that only enforces groups without enforcing the order within the groups

You can also add your own style by extending Style class.

Configuration

You will want to set the application-import-names option to a comma separated list of names that should be considered local to your application. These will be used to help categorise your import statements into the correct groups. Note that relative imports are always considered local.

You will want to set the application-package-names option to a comma separated list of names that should be considered local to your company or organisation, but which are obtained using some sort of package manager like Pip, Apt, or Yum. Typically, code representing the values listed in this option is located in a different repository than the code being developed. This option is only accepted in the supported appnexus or edited styles or in any style that accepts application package names.

The application-import-names and application-package-names can contain namespaced packages or even exact nested module names. (This is possible with 0.16 onwards).

import-order-style controls what style the plugin follows (cryptography is the default).

Limitations

Currently these checks are limited to module scope imports only. Conditional imports in module scope will be ignored except imports under `if TYPE_CHECKING:` block.

Classification of an imported module is achieved by checking the module against a stdlib list and then if there is no match against the application-import-names list and application-package-names if the style accepts application-package names. Only if none of these lists contain the imported module will it be classified as third party.

These checks only consider an import against its previous import, rather than considering all the imports together. This means that I100 errors are only raised for the latter of adjacent imports out of order. For example,

import X.B
import X  # I100
import X.A

only import X raises an I100 error, yet import X.A is also out of order compared with the import X.B.

Imported modules are classified as stdlib if the module is in a vendored list of stdlib modules. This list is based on the latest release of Python and hence the results can be misleading. This list is also the same for all Python versions because otherwise it would be impossible to write programs that work under both Python 2 and 3 and pass the import order check.

The I202 check will consider any blank line between imports to count, even if the line is not contextually related to the imports. For example,

import logging
try:
    from logging import NullHandler
except ImportError:
    class NullHandler(logging.Handler):
        """Shim for version of Python < 2.7."""

        def emit(self, record):
            pass
import sys  # I202 due to the blank line before the 'def emit'

will trigger a I202 error despite the blank line not being contextually related.

Extending styles

You can add your own style by extending flake8_import_order.styles.Style class. Here’s an example:

from flake8_import_order.styles import Cryptography


class ReversedCryptography(Cryptography):
    # Note that Cryptography is a subclass of Style.

    @staticmethod
    def sorted_names(names):
        return reversed(Cryptography.sorted_names(names))

By default there are five import groupings or sections; future, stdlib, third party, application, and relative imports. A style can choose to accept another grouping, application-package, by setting the Style class variable accepts_application_package_names to True, e.g.

class PackageNameCryptography(Cryptography):
    accepts_application_package_names = True

To make flake8-import-order able to discover your extended style, you need to register it as flake8_import_order.styles using setuptools’ entry points mechanism:

# setup.py of your style package
setup(
    name='flake8-import-order-reversed-cryptography',
    ...,
    entry_points={
        'flake8_import_order.styles': [
            'reversed = reversedcryptography:ReversedCryptography',
            # 'reversed' is a style name.  You can pass it to
            # --import-order-style option
            # 'reversedcryptography:ReversedCryptography' is an import path
            # of your extended style class.
        ]
    }
)

Release files for flake8-import-order 0.19.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flake8-import-order 0.19.2
File Size Uploaded
flake8_import_order-0.19.2.tar.gz 31.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for flake8-import-order 0.19.2
File Interpreter ABI Platform
flake8_import_order-0.19.2-py3-none-any.whl Python 3 none any Details

Total release size: 48.2 kB

Release files / flake8_import_order-0.19.2.tar.gz

Download URL flake8_import_order-0.19.2.tar.gz
Size 31.9 kB
Tags Source
SHA-256 checksum
How to use checksums
133b3c55497631e4235074fc98a95078bba817832379f22a31f0ad2455bcb0b2
BLAKE2b-256 checksum
How to use checksums
d62f5d2095e2f63b5fabe2d4a7e97c28bfcf901dcd9335650d9e582283bb02b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 24, 2025.

Transparency log

Release files / flake8_import_order-0.19.2-py3-none-any.whl

Download URL flake8_import_order-0.19.2-py3-none-any.whl
Size 16.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2dfe60175e7195cf36d4c573861fd2e3258cd6650cbd7616da3c6b8193b29b7c
BLAKE2b-256 checksum
How to use checksums
18d43d067f1c4a429e82ec9ae54a346ef50e4d317c6cdfba6bd1443c162ff39f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 24, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.19.2 This release

2 release files

0.19.1

2 release files

0.19.0

2 release files

0.18.2

2 release files

0.18

2 release files

0.17

2 release files

0.16

2 release files

0.15

2 release files

0.14.2

2 release files

0.14.1

2 release files

0.14

2 release files

0.13

2 release files

0.12

2 release files

0.11

2 release files

0.10

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9

2 release files

0.8

2 release files

0.7

2 release files

0.6.1

2 release files

0.6

3 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4

2 release files

0.3.2

2 release files

0.3.1

3 release files

0.3

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page