如何自动整理导入包的顺序

阅读过《Google 开源项目风格指南——Python 语言规范》的同学都一定看到过,导入包是有一定顺序的。如果没有阅读过可以点这里查看。

这一重复但又必要的工作是否有工具帮我们完成呢?

可以试试 isort。

isort

项目地址

https://github.com/timothycrosley/isort

安装

1
python3 -m pip install isort -i https://mirrors.aliyun.com/pypi/simple

因为这个工具在任何项目中都会使用到,所以就在系统的默认 python 环境中安装。如果你只是想尝试一下,也可以在虚拟环境中安装:

1
pipenv install isort

使用

我们先来看一下使用效果。

使用前:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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")

使用后:

1
2
3
4
5
6
7
8
9
10
11
12
13
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")

我们可以在命令行中使用:

1
isort mypythonfile.py mypythonfile2.py

或者

1
isort .

使用 isort . 会把当前目录及子目录全部格式化 import,有点类似 git 命令中的 git add .

在 python 中使用:

1
2
3
4
import isort


isort.file("pythonfile.py")

在 PyCharm 中使用

如果我们不想每次格式化导入使用 isort 命令的话,可以配合 pycharm 使用。

首先我们需要确认一下 isort 的安装位置:

Mac 系统可以这样查看:

1
2
➜  ~ which isort
/Library/Frameworks/Python.framework/Versions/3.8/bin/isort

然后需要在 PyCharm 中的 Preferences -> Tools -> Files Watchers 中添加新的内容,具体可以看下图:

这样每次在 PyCharm 保存文件的时候会自动格式化 import 导入的库,比较方便。