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

flake8-import-order的Python项目详细描述


Build Status

检查排序的flake8Pylama插件 你的进口货。它没有检查任何关于 进口。只是它们被正确地分组和排序。

一般来说,首先是stdlib,然后是第三方,然后是本地包, 每一组都是按字母顺序排列的,但这取决于 使用的样式。flake8导入顺序支持多个styles,并且是可扩展的,允许custom styles

这个插件最初是为了匹配 cryptography项目, 保留默认样式。

警告

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

  • I100:导入语句的顺序不正确。
  • I101:from导入中的名称顺序错误。
  • I201:导入组之间缺少换行符。
  • I202:导入组中的附加换行符。

样式

直接支持以下样式,

  • cryptography-请参见example
  • google-在Google Style Guidelines中描述的样式,请参见example
  • smarkets-样式为google仅与import语句一起使用,在from x import…语句之前,请参见example
  • appnexus-样式为google仅使用import对您公司或组织本地的包的语句,在import对第三方包的语句之后,请参见example
  • edited-参见example
  • pycharm-仅对导入的名称进行区分大小写排序,样式为smarkets
  • pep8-仅强制组而不强制组内顺序的样式

您还可以通过扩展^{tt15}来add your own 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-namesif 样式接受应用程序包名称。除非这些都没有 包含导入模块的列表是否将其分类为第三个 聚会。

这些支票只考虑与以前的进口相比较的进口, 而不是考虑所有的进口。这意味着 I100只为后面的相邻导入引发错误 秩序井然。例如,

importX.BimportX# I100importX.A

只有import X引发一个I100错误,但是import X.A也是 与import X.B相比,不正常。

如果模块位于 stdlib模块的供应商列表。此列表基于最新的 python的发布及其结果可能会产生误导。此列表 对于所有python版本也是一样的,因为否则 不可能同时在python 2和3下编写程序 通过进口订单检查。

I202检查将考虑导入到 即使行与 进口。例如,

importloggingtry:fromloggingimportNullHandlerexceptImportError:classNullHandler(logging.Handler):"""Shim for version of Python < 2.7."""defemit(self,record):passimportsys# I202 due to the blank line before the 'def emit'

将触发^ {tT4}$$,尽管空白行不存在。 语境相关。

扩展样式

您可以通过扩展^{tt33}来添加自己的样式$ 上课。下面是一个示例:

fromflake8_import_order.stylesimportCryptographyclassReversedCryptography(Cryptography):# Note that Cryptography is a subclass of Style.@staticmethoddefsorted_names(names):returnreversed(Cryptography.sorted_names(names))

默认情况下,有五个导入组或节;future, stdlib、第三方、应用程序和相关导入。风格可以 通过设置 Style类变量accepts_application_package_names到 正确,例如

classPackageNameCryptography(Cryptography):accepts_application_package_names=True

要使flake8导入订单能够发现您的扩展样式,您需要 使用setuptools'entry points将其注册为flake8_import_order.styles。 机构:

# setup.py of your style packagesetup(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.]})

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
部署在kubernetes上时,微服务中服务间通信中的java连接超时问题   java Nway合并对2G字符串文件进行排序   java如何使用FlexJson按特定顺序序列化对象和属性   如何在java布尔方法中导入文本文件   swing需要帮助在我的Java GUI中实现用户输入的侦听器   java如何读取枚举中Spring Messagesource的内容?   每个Ajaxcall上(之前和之后)的java Javascript   java compareTo(Comparable)方法对于Comparable类型未定义   带换行符的java Bash输入重定向   使用Spring授权标记检查用户是否登录时发生java错误?   使用大尺寸(100000)数组执行快速排序时出现Java StackOverflower错误   java forEach迭代器标记   Java ClassNotFound异常,Maven依赖项作为JAR   java将HQL转换为SQL查询   java正在将片段列表发送到FragmentPagerAdapter   java onActivityResult应该调用super。onActivityResult   java如果我导入一个超类,我也需要导入它的子类吗?   java是否可以通过openid协议对aadhar进行身份验证