一、介绍

isort是一个实用的Python库,用于按照字母表顺序对imports进行排序,并自动按类型(标准库/第三方库/自己的模块/.......)划分部分。它为各种编辑器提供了命令行程序、python库和插件以快速对所有导入进行排序。它需要python3.7+才能运行,但也支持格式化python2代码。

先看官网提供的例子,了解isort的魅力之处

# Before 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")

使用isort格式化后

# After isort
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跟安装其他第三库的方式是一样,只需在命令行中输入:

pip install isort

三、使用

1、特定文件

示例:未使用isort时的代码文件learning.py

vscode python 导入单个类 vscode导入其他python模块_开发语言

①方法一:在文件的路径下新建一个py文件,运行成功后即可将对应的文件导入模块进行排序

vscode python 导入单个类 vscode导入其他python模块_开发语言_02

②方法二:在命令行使用命令

isort learning.py

 通过上述操作即可获取排序后的文件

vscode python 导入单个类 vscode导入其他python模块_搜索_03

 2、递归目录

使用以下指令可以对目录下的所有文件导入模块进行排序

isort .

isort **/*.py

3、查看建议的更改而不修改文件

isort xxx.py --diff

示例

vscode python 导入单个类 vscode导入其他python模块_python_04

 四、vscode

在vscode进行配置,保存时即对导入模块进行排序

1、安装isort,方法见二

2、对vscode的setting进行配置

①使用快捷键Ctrl + Shift + P,搜索Preferences: Open Settings(UI)

vscode python 导入单个类 vscode导入其他python模块_python_05

 ②搜索OnSave,点击Edit in setting.json

vscode python 导入单个类 vscode导入其他python模块_vscode python 导入单个类_06

 ③修改setting.json的配置

vscode python 导入单个类 vscode导入其他python模块_命令行_07

五、操作注释

在单个文件中配置isort流的最基本方法是操作注释。这些注释在解析过程中由isort解析器拾取和解释。

1、isort: skip_file:跳过整个文件

# isort: skip_file
import os
import sys

2、isort: skip 

如果与导入语句放在同一行(或a的延续内),isort将不会对此导入进行排序

import b
import a # isort: skip    使用该指令后,前面的语句将不会被排序

3、isort: off

关闭isort解析。语句后的每一行都将保持不变地传递,直到注释或文件结束

import e
import f

# isort: off

import b
import a

4、isort: on

重新打开isort解析。这只有在文件中存在更高的注释时才有意义,允许在其他排序的导入块周围拥有未排序的导入块。

import e
import f

# isort: off

import b
import a

# isort: on

import c
import d

5、isort:split

告知isort当前排序部分已完成,并且所有将来的导入都属于新的排序分组。

import e
import f

# isort: split

import a
import b
import c
import d

6、dont-add-imports

不自动将导入添加到此文件,即使设置了--add-imports也是如此

7、dont-add-import

不自动添加特定的导入,即使--add-imports也是如此

8、isort -a

向所有文件添加导入

isort -a "from __future__ import print_function" *.py

仅将导入添加到已导入的文件

isort -a "from __future__ import print_function" --append-only *.py

9、isort --rm

从多个文件中删除导入

isort --rm "os.system" *.py