跳转到主要内容

Flake8和pylama插件,用于检查导入语句的顺序。

项目描述

Build Status

这是一个flake8Pylama插件,用于检查你的导入顺序。它不会检查导入的其他内容,只是确保它们被正确地分组和排序。

一般来说,stdlib首先,然后是第三方库,然后是本地包,并且每个组都单独按字母顺序排列,但具体取决于所使用的样式。Flake8-Import-Order支持多种样式,并且是可扩展的,允许定义自定义样式

此插件最初是为了匹配cryptography项目的样式偏好而开发的,默认样式保持不变。

警告

此软件包增加了4个新的flake8警告

  • I100:您的导入语句顺序错误。

  • I101:您的from导入语句中的名称顺序错误。

  • I201:导入组之间缺少换行符。

  • I202:导入组中有额外的换行符。

样式

以下样式直接受支持:

  • cryptography - 请参阅示例

  • google - 在Google样式指南中描述的样式,请参阅示例

  • smarkets - 与google相同的样式,但只在import语句之前有from X import …语句,请参阅示例

  • appnexus - 与google相同的样式,但只在公司或组织本地的包的import语句之后有第三方包的import语句,请参阅示例

  • edited - 请参阅示例

  • pycharm - 与smarkets相同的样式,但对导入的名称进行大小写敏感的排序

  • pep8 - 只强制执行组而不是强制执行组内的顺序的样式

您也可以通过扩展Style类来添加您自己的样式

配置

您需要将application-import-names选项设置为逗号分隔的名称列表,这些名称应被视为您应用程序本地的。这些将用于帮助将您的导入语句分类到正确的组中。注意,相对导入始终被视为本地。

您需要将application-package-names选项设置为逗号分隔的名称列表,这些名称应被视为您公司或组织本地的,但使用某些类型的包管理器(如Pip、Apt或Yum)获取。通常,代表此选项中列出的值的代码位于与正在开发的代码不同的存储库中。此选项仅在受支持的appnexusedited样式或接受应用程序包名称的任何样式中接受。

application-import-namesapplication-package-names可以包含命名空间包或甚至是确切的嵌套模块名称。(从0.16版本开始)。

import-order-style控制插件遵循的样式(默认为cryptography)。

限制

目前这些检查仅限于模块作用域的导入。模块作用域中的条件导入也将被忽略。

通过将导入的模块与stdlib列表进行匹配,然后如果没有与application-import-names列表和application-package-names(如果样式接受应用程序包名称)匹配,则对导入模块进行分类。只有当这些列表中都没有导入的模块时,才会将其分类为第三方。

这些检查只考虑对前一次导入的导入,而不是考虑所有导入一起。这意味着只有相邻导入中的后者顺序错误时才会引发 I100 错误。例如,

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

只有 import X 会引发 I100 错误,而 import X.Aimport X.B 的顺序也是错误的。

如果模块位于stdlib模块的供应商列表中,则导入的模块被分类为stdlib。该列表基于Python的最新版本,因此结果可能具有误导性。由于否则将无法编写同时在Python 2和3下工作并通过导入顺序检查的程序,因此该列表对所有Python版本都是相同的。

I202 检查将考虑导入之间的任何空白行进行计数,即使该行与导入无关。例如,

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'

即使在空白行与上下文无关的情况下,也会触发 I202 错误。

扩展样式

您可以通过扩展 flake8_import_order.styles.Style 类来添加自己的样式。以下是一个示例

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))

默认情况下,有五个导入分组或部分;future、stdlib、第三方、应用程序和相对导入。样式可以选择通过将 Style 类变量 accepts_application_package_names 设置为True来接受另一个分组,即应用包,例如。

class PackageNameCryptography(Cryptography):
    accepts_application_package_names = True

要使flake8-import-order能够发现您的扩展样式,您需要使用setuptools的 入口点机制将其注册为 flake8_import_order.styles

# 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.
        ]
    }
)

项目详细信息


下载文件

下载适用于您的平台文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分发

flake8-import-order-0.18.2.tar.gz (21.7 kB 查看散列)

上传时间

构建分发

flake8_import_order-0.18.2-py2.py3-none-any.whl (16.0 kB 查看散列)

上传时间 Python 2 Python 3

由以下提供支持