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第三方库


热门话题
反射Java反射:高负载下的NoSuchMethodException   java RxJava:one request>list of Integer>sequence of requests for each int>result to list   java为什么循环之前索引会增加   JavaSpring远程处理和RESTfulURL   java Hibernate搜索仅对我的实体的一部分进行索引   使用DPAD快速滚动时,java RecyclerView onCreateViewHolder调用过多   java将JSON解析到一个表中   java导航抽屉标题textview nullpointerexception   基于接口的Java链接队列   java Guice运行时依赖项参数重新注入   java展平/压缩ZSH中的深度嵌套目录   JavaSpring:Http406此请求标识的资源只能   java如何制作Android启动器图标   Java代码在windows上显示不正确(包含希腊语句子)   使用yourkit进行内存分析所用的java时间   java为什么可以序列化属性而不能序列化对象本身?