一、简介
isort是一个自动对 Python 的 import 语句进行排序和分段的工具,需要Python 3.6+ 才能运行,但也支持格式化 Python 2 代码。
排序前你的代码可能是这样的:
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")
二、安装
pip install isort
三、使用
指定文件:
isort mypythonfile.py mypythonfile2.py
递归目录:
isort .
查看建议的更改而不修改文件:
isort mypythonfile.py --diff
忽略单个导入:
import module # isort:skip
或者:
from xyz import (abc, # isort:skip
yo,
hey)
跳过整个文件:
""" my_module.py
Best module ever
isort:skip_file
"""
import b
import a
四、配置
操作注释:
skip_file 跳过整个文件:
# !/bin/python3
# isort: skip_file
import os
import sys
skip 忽略单行:
import b
import a # isort: skip <- this will now stay below b
off 关闭排序,# isort: off语句之后的每一行都将原封不动,直到# isort: on注释或文件结束:
import e
import f
# isort: off
import b
import a
on 开启排序,重新打开 isort 解析:
import e
import f
# isort: off
import b
import a
# isort: on
import c
import d
split 分割,告诉 isort 当前排序部分已完成,所有未来的导入都属于新的排序分组:
import e
import f
# isort: split
import a
import b
import c
import d
您还可以内联使用它来防止导入在其上方或下方交换位置:
import c
import b # isort: split
import a
dont-add-imports 不自动将导入添加到此文件,即使设置了 --add-imports 也是如此。
dont-add-import: [IMPORT_LINE] 不自动添加特定的导入,即使 --add-imports 说要添加它。
添加或删除导入:
向所有文件添加导入:
isort -a "from __future__ import print_function" *.py
仅向已导入的文件添加导入:
isort -a "from __future__ import print_function" --append-only *.py
从多个文件中删除导入:
isort --rm "os.system" *.py
与black一同使用:
在配置文件设置profile:
[tool.isort]
profile = "black"
multi_line_output = 3
或者在命令行设置:
isort --profile black
与pre-commit一同使用:
配置 .pre-commit-config.yaml 文件:
- repo: https://github.com/pycqa/isort
rev: 5.8.0
hooks:
- id: isort
name: isort (python)
- id: isort
name: isort (cython)
types: [cython]
- id: isort
name: isort (pyi)
types: [pyi]
常见配置参数:
- multi_line_output 多行输出
- include_trailing_comma 在包含括号的多行导入中包含尾随逗号
- force_grid_wrap 强制网格包裹
- use_parentheses 在长度限制上使用括号代替斜线来延续行
- ensure_newline_before_comments 在导入后的注释前插入一个空行。
- line_length 导入行的最大长度
- combine_as_imports 合并为同一行上的导入
- force_single_line 强制所有导入在他们自己的行上