Isort-用于对import进行排序的Python实用程序/库

isort 是一个Python的实用程序/库,它会按字母顺序对导入(import)的库进行排序,并自动分组。它提供多种实用方式,包括命令行、Python库和VSCode、Pycharm插件快速分拣你所有的import。

它基于Python 3.6+实现,但也支持格式化Python 2代码

在isort之前:

from my_lib import Object
import os
from my_lib import Object3
from my_lib import Object2
import sys
from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14
import sys
from __future__ import absolute_import
from third_party import lib3
print("Hey")
print("yo")

排序后:

from __future__ import absolute_import import os
import sys from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
                        lib9, lib10, lib11, lib12, lib13, lib14, lib15)

from my_lib import Object, Object2, Object3 
print("Hey")
print("yo")

安装isort

安装isort非常简单,只需:

pip install isort

安装isort,并提供Requirements.txt支持:

pip install isort[requirements_deprecated_finder]

安装支持管道文件的isort:

pip install isort[pipfile_deprecated_finder]

安装支持两种格式的isort:

pip install isort[requirements_deprecated_finder,pipfile_deprecated_finder]

使用isort

从命令行

要在特定文件上运行,请执行以下操作:

isort mypythonfile.py mypythonfile2.py

要递归应用,请执行以下操作:

isort .

如果globstar已启用,isort .相当于:

isort **/*.py

要查看建议的更改而不应用它们,请执行以下操作:

isort mypythonfile.py --diff

最后,要对项目自动运行isort,仅在未引入语法错误的情况下应用更改:

isort --atomic .

(注意:这在默认情况下是禁用的,因为它阻止isort针对使用不同版本的Python编写的代码运行。)

从Python内部

import isort
isort.file(“pythonfile.py”)

或者:

import isort
sorted_code = isort.code(“import b\nimport a\n)

为您首选的文本编辑器安装isort

已经编写了几个插件,可以在各种文本编辑器中使用isort。您可以找到它们的完整列表on the isort
wiki
此外,我将热情地接受包括其他文本编辑器插件的Pull请求,并在收到通知时为它们添加文档

多行输出模式

您将注意到上面的“MULTI_LINE_OUTPUT”设置。此设置定义当从导入扩展到超过line_length限制并具有12 possible settings

压痕

要更改常量缩进的显示方式-只需使用以下可接受的格式更改缩进属性:

  • 您想要的空间数。例如:4将导致标准的4空格缩进
  • 选项卡
  • 带引号的逐字字符串

例如:

"    "

等于4

对于使用圆括号的导入样式,可以控制是否在上次导入后使用include_trailing_comma选项(默认为False)

智能平衡多行导入

从isort3.1.0开始,添加了对平衡多行导入的支持。启用此功能后,isort会将导入长度动态更改为生成最平衡格网的长度,同时保持在定义的最大导入长度以下

示例:

from __future__ import (absolute_import, division,
                        print_function, unicode_literals)

将会产生,而不是:

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

要启用此设置,请执行以下操作balanced_wrappingTrue在您的配置中,或将-e选项添加到命令行实用程序中

自定义节和排序

isort提供了配置选项来更改导入在各个部分中的组织、排序或分组方式的几乎每一个方面

Click here有关所有这些选项的概述,请参阅

跳过导入处理(配置之外)

要使isort忽略单个导入,只需在包含文本的导入行末尾添加注释isort:skip

import module  # isort:skip

或者:

from xyz import (abc,  # isort:skip
                 yo,
                 hey)

要使isort跳过整个文件,只需添加isort:skip_file添加到模块的文档字符串:

""" my_module.py
    Best module ever

   isort:skip_file
"""

import b
import a

从多个文件添加或删除导入

可以运行isort或将其配置为自动添加/删除导入

See a complete guide here.

使用isort验证代码

这个--check-only选项

也可以使用isort来验证代码的格式是否正确,方法是使用-c任何包含错误排序和/或格式化导入的文件都将输出到stderr

isort **/*.py -c -v

SUCCESS: /home/timothy/Projects/Open_Source/isort/isort_kate_plugin.py Everything Looks Good!
ERROR: /home/timothy/Projects/Open_Source/isort/isort/isort.py Imports are incorrectly sorted.

可以使用它的一个很好的地方是使用预先提交的git钩子,比如@acdha提供的这个钩子:

https://gist.github.com/acdha/8717683

这有助于在整个项目中确保一定级别的代码质量

Git钩子

isort提供了一个钩子函数,该函数可以集成到Git预提交脚本中,以便在提交之前检查Python代码

More info here.

Setuptools集成

安装后,isort将启用setuptools用于检查项目声明的Python文件的命令

More info here.

把消息传出去

将此徽章放在存储库的顶部,让其他人知道您的项目使用了isort

对于Readme.md:

[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)

或readme.rst:

.. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
    :target: https://pycqa.github.io/isort/

安全联系信息

若要报告安全漏洞,请使用Tidelift security
contact
Tidelift将协调修复和披露

为什么是伊索尔?

isort简单地表示导入排序。它最初名为“sortImports”,但是我厌倦了键入额外的字符,并意识到CamelCase并不是巨蟒

我之所以编写isort,是因为在我曾经工作过的一个组织中,经理有一天来了,他决定所有代码都必须按字母顺序对导入进行排序。代码库很大–他的意思是让我们手工完成。然而,作为一名程序员-我太懒了,不会花8个小时盲目地执行一个函数,但也不会太懒,不会花16个小时让它自动化。我获得了开放源码sortImports的许可,我们在这里:)


Get professionally supported isort with the Tidelift
Subscription

对isort的专业支持是作为Tidelift
Subscription
Tidelift为软件开发团队提供了购买和维护软件的单一来源,并由最了解该技术的专家提供专业级别保证,同时与现有工具无缝集成


谢谢,我希望你觉得isort有用!

~蒂莫西·克罗斯利