flake8和pylama插件,用于检查导入语句的顺序。
flake8-import-order的Python项目详细描述
检查排序的flake8和Pylama插件 你的进口货。它没有检查任何关于 进口。只是它们被正确地分组和排序。
一般来说,首先是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。通常,代码表示 此选项中列出的值位于不同的存储库中 而不是正在开发的代码。此选项仅在 支持appnexus或edited样式或任何 接受应用程序包名称。
application-import-names和application-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.]})