Python isort是专门用来整理import语句的工具,它不仅能对标准库、第三方库、本地模块做基础分类,还支持对第三方库进行更细粒度的分组,满足不同项目的代码规范需求。

isort默认第三方库分组逻辑
isort默认会将所有第三方库归为同一组,放在标准库导入之后、本地模块导入之前,默认按照库名的字母顺序排列。比如下面的导入语句,经过默认配置处理后会变成对应顺序:
# 原始导入语句 import flask import requests import numpy import os from myproject import utils # isort默认处理后 import os import flask import numpy import requests from myproject import utils
其中os是标准库,flask、numpy、requests都是第三方库,会被统一放在标准库下方,按字母顺序排列。
自定义第三方库分组配置
如果项目需要将第三方库进一步拆分,比如把Web框架相关库、数据处理相关库、工具类库分成不同组,可以通过isort的配置文件实现。isort支持在setup.cfg、pyproject.toml、isort.cfg等配置文件中设置分组规则。
核心配置参数
实现第三方库分组主要用到以下几个配置项:
- sections:定义所有的导入分组顺序,默认值为FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER,我们可以新增自定义的分组名称。
- third_party:指定哪些库属于默认的THIRDPARTY分组,也可以为自定义分组单独设置对应的库列表。
- no_lines_before:设置哪些分组前面不需要空行分隔。
配置示例
假设我们要把第三方库分成web框架、数据处理、通用工具三个组,配置如下(以pyproject.toml为例):
[tool.isort] # 定义分组顺序,新增三个自定义分组 sections = ["FUTURE", "STDLIB", "WEB_FRAMEWORK", "DATA_PROCESS", "COMMON_TOOL", "FIRSTPARTY", "LOCALFOLDER"] # 标准库分组(默认不需要额外配置,isort会自动识别) # Web框架分组包含的库 known_web_framework = ["flask", "django", "fastapi"] # 数据处理分组包含的库 known_data_process = ["numpy", "pandas", "matplotlib"] # 通用工具分组包含的库 known_common_tool = ["requests", "pytest", "celery"] # 自定义分组对应的known配置映射 web_framework = "known_web_framework" data_process = "known_data_process" common_tool = "known_common_tool" # 分组之间用空行分隔 lines_between_sections = 1
处理前的导入语句:
import os import flask import pandas import requests from myproject import db import numpy
经过上述配置处理后,结果如下:
import os import flask import numpy import pandas import requests from myproject import db
分组策略注意事项
在配置第三方库分组时需要注意几个问题:
- 如果某个库没有被分配到任何自定义分组,isort会默认将其归到THIRDPARTY分组,如果THIRDPARTY分组没有被定义,会直接放在标准库之后。
- 同一个库不要同时分配到多个自定义分组,否则isort会按照分组顺序将其放到第一个匹配的分组中。
- 配置完成后可以通过
isort --check-only .命令检查配置是否生效,避免配置语法错误导致分组规则不生效。
分组策略的实际应用场景
第三方库分组策略在大型项目中作用明显,比如微服务项目中可以把不同服务依赖的SDK分成不同组,方便快速查看某个服务的依赖情况;数据分析项目中可以把数据读取、数据清洗、可视化相关的库分成不同组,让import区域的结构更清晰。合理设置分组策略能让代码维护成本更低,新成员也能更快熟悉项目的依赖结构。