らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

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

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

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

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

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

インストール

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

pip install isort

サンプルスクリプト

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

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 オプションを指定します。 修正箇所がある場合は以下のように表示されます。

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

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

$ isort -c test1.py
$

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

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

$ 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 オプションを指定します。 この場合もファイル自体は修正されません=書き換わりません。

$ 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!')

ファイルを修正する

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

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

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

$ 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!')