Skip to content
On this page

import 导包自动整理工具Isort

Isort 简介

在编写模块时,我们会⽤ import 语句来导⼊其他依赖模块。假 如依赖模块很多,这些 import 语句也会随之变多。此时如果缺少规 范,这许许多多的 import 就会变得杂乱⽆章,难以阅读。

为了解决这个问题,PEP 8 规范提出了⼀些建议。PEP 8 认为,⼀ 个源码⽂件内的所有 import 语句,都应该依照以下规则分为三组:

(1) 导⼊ Python 标准库包的 import 语句;

(2) 导⼊相关联的第三⽅包的 import 语句;

(3) 与当前应⽤(或当前库)相关的 import 语句。

不同的 import 语句组之间应该⽤空格分开。

如果⽤上⾯的规则来组织代码,import 语句会变得更整⻬、更 有规律,阅读代码的⼈也能更轻松地获知每个依赖模块的来源。

但问题是,虽然上⾯的分组规则很有⽤,但要遵守它,⽐你想的 要⿇烦许多。试想⼀下,在编写代码时,每当你新增⼀个外部依赖, 都得先扫⼀遍⽂件头部的所有 import 分组,找准新依赖属于哪个分 组,然后才能继续编码,整个过程⾮常烦琐。

幸运的是,isort ⼯具可以帮你简化这个过程。借助 isort,我 们不⽤⼿动进⾏任何分组,它会帮我们⾃动做好这些事。

Isort 使用

源文件 isort_demo.py 内容如下

python
import os
import requests 
import myweb.models
from myweb.views import menu
from urllib import parse 
import django

其中 myweb 是本地应⽤的模块名,使用命令 isort isort_demo.py命令后,这些 import 语句都会 被排列整⻬:

python
import os 
from urllib import parse 

import django
import requests 

import myweb.models from myweb.views 
import menu

第⼀部分:标准库包

第⼆部分:第三⽅包

第三部分:本地包

除了能⾃动分组以外,isort 还有许多其他功能。⽐如,某个 import 语句特别⻓,超出了 PEP 8 规范所规定的最⼤⻓度限制, isort 就会将它⾃动折⾏,免去了⼿动换⾏的⿇烦。

总之,有了 isort 以后,你在调整 import 语句时可以变得随 ⼼所欲,只需负责⼀些简单的编辑⼯作,isort 会帮你搞定剩下的所 有事情——只要执⾏ isort,整段 import 代码就会⾃动变得整⻬且 漂亮。

Released under the MIT License.