Skip to main content

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

项目描述

构建状态

检查导入顺序的flake8Pylama插件。它不检查有关导入的任何其他内容。仅仅是它们被正确分组和排序。

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

这个插件最初是为了匹配密码学项目的风格偏好而开发的,这种风格保持默认。

警告

这个包增加了 4 个新的 flake8 警告

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

  • I101:您的 from import 中的名称顺序错误。

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

  • I202:一组导入中的附加换行符。

风格

直接支持以下样式,

  • 密码学- 看一个例子

  • google -style 在Google Style Guidelines中描述,看一个例子

  • smarkets -谷歌风格,仅在from X import ...语句之前使用import语句,请参阅示例

  • appnexus -仅与google一样的样式,在第三方包的导入语句之后,您的公司或组织本地包的导入语句,请参阅示例

  • 编辑- 看一个例子

  • pycharm -仅使用区分大小写排序导入名称的smarkets样式

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

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

配置

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

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

application-import-namesapplication-package-names可以包含命名空间包,甚至是精确的嵌套模块名称。(这在 0.16 以后是可能的)。

import-order-style控制插件遵循的样式(密码是默认的)。

限制

目前,这些检查仅限于模块范围的导入。模块范围内的条件导入也将被忽略。

导入模块的分类是通过根据 stdlib 列表检查模块来实现的,然后如果 样式接受应用程序包名称,则与application-import-names列表和application-package-names不匹配。只有当这些列表都不包含导入的模块时,它才会被归类为第三方。

这些检查只考虑与之前的导入相比的导入,而不是考虑所有的导入。这意味着 I100错误仅针对无序的相邻导入的后者引发。例如,

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

import X引发I100错误,但import XA与import XB相比也出现故障。

如果模块在标准库模块的供应商列表中,则导入的模块被归类为标准库。此列表基于 Python 的最新版本,因此结果可能会产生误导。这个列表对于所有 Python 版本也是相同的,因为否则就不可能编写在 Python 2 和 3 下都可以工作的程序 通过导入顺序检查。

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

默认情况下有五个导入分组或部分;未来、标准库、第三方、应用程序和相关导入。通过将Style类变量Accept_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.1.tar.gz (21.2 kB 查看哈希

已上传 source

内置分布

flake8_import_order-0.18.1-py2.py3-none-any.whl (16.0 kB 查看哈希

已上传 py2 py3