Skip to content

isort で Python の import 順序を PEP8 準拠に修正する

Python で import するライブラリの順序は PEP8 で決められています

import文 は次の順番でグループ化すべきです:

  1. 標準ライブラリ
  2. サードパーティに関連するもの
  3. ローカルな アプリケーション/ライブラリ に特有のもの

isort を使うと Python で import するライブラリの順序を並び替えてくれます。

インストール

pip でインストールします。

1
pip install isort

サンプルスクリプト

example.py という名前で下記のサンプルスクリプトを用意しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import boto3
import lib2
import lib1
import os
import sys
import calendar
from functools import singledispatch
from datetime import datetime

print('Hello, World!')

修正箇所があるか、確認する (修正はしない)

「修正箇所があるか、確認はする」が「修正はしない」という場合は -c または --check-only オプションを指定します。 修正箇所がある場合は以下のように表示されます。

1
2
$ isort -c example.py
ERROR: /home/user/example.py Imports are incorrectly sorted.

修正箇所が無い場合は何も表示されません。

1
2
$ isort -c test1.py
$

修正結果を標準出力へ表示する

修正結果を標準出力へ表示する場合は -d または --stdout オプションを指定します。 この場合、ファイル自体は修正されません=書き換わりません。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ isort -d example.py
import calendar
import os
import sys
from datetime import datetime
from functools import singledispatch

import boto3

import lib1
import lib2

print('Hello, World!')

修正結果を diff 形式で表示する

修正結果を diff 形式で表示する場合は -df または --diff オプションを指定します。 この場合もファイル自体は修正されません=書き換わりません。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$ isort -df example.py
--- /home/user/example.py:before     2020-02-12 09:26:12.903143
+++ /home/user/example.py:after      2020-02-12 09:31:20.943014
@@ -1,10 +1,12 @@
-import boto3
-import lib2
-import lib1
+import calendar
 import os
 import sys
-import calendar
+from datetime import datetime
 from functools import singledispatch
-from datetime import datetime
+
+import boto3
+
+import lib1
+import lib2

 print('Hello, World!')

ファイルを修正する

ファイル自体を修正する場合はオプション無しで実行します。

1
2
$ isort example.py
Fixing /home/user/example.py

これでファイルが修正されました=書き換えられました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ cat example.py
import calendar
import os
import sys
from datetime import datetime
from functools import singledispatch

import boto3

import lib1
import lib2

print('Hello, World!')