python导入排序-isort

432 阅读2分钟

一、简介

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 强制所有导入在他们自己的行上