import-private-name / C2701#

Message emitted:

Imported private %s (%s)

Description:

Used when a private module or object prefixed with _ is imported. PEP8 guidance on Naming Conventions states that public attributes with leading underscores should be considered private.

Problematic code:

from argparse import _AttributeHolder, _SubParsersAction  # [import-private-name]

attr_holder = _AttributeHolder()


def add_sub_parser(sub_parsers: _SubParsersAction):
    sub_parsers.add_parser("my_subparser")
    # ...

Correct code:

"""Private import can be used as type annotations."""

from argparse import _SubParsersAction


def add_sub_parser(sub_parsers: _SubParsersAction):
    sub_parsers.add_parser("my_subparser")
    # ...

Configuration file:

[main]
load-plugins = pylint.extensions.private_import

Additional details:

Using private imports expose you to unexpected breaking changes for any version bump of your dependencies, even in patch versions.

Note

This message is emitted by the optional 'import-private-name' checker, which requires the pylint.extensions.private_import plugin to be loaded.

Created by the import-private-name checker.