isort は、Python のコードフォーマッタのひとつ。 使うことで、インポート文を Python の標準的なコーディング規約である PEP8 に沿った形で整形できる。
ところで、PEP8 では同じパッケージのオブジェクトをインポートする際には 1 行にまとめても構わないとしている。
ただ、これは完全に好みの問題だけど自分は同じパッケージのインポートであってもオブジェクトごとに 1 行ずつ分割したい。 1 行に 1 つのオブジェクトしか書かなければ、その行で何をインポートしているかが明確になって読みやすいと感じるため。
そこで、今回は isort で 1 行に 1 つのオブジェクトをインポートする方法について書く。
結論から先に述べると、コマンドラインオプションであれば --sl
または --force-single-line-imports
を付ければ良い。
また、設定ファイルを使って指定することもできる。
使った環境は次のとおり。
$ sw_vers ProductName: macOS ProductVersion: 14.6.1 BuildVersion: 23G93 $ python -V Python 3.11.9
もくじ
下準備
下準備として isort をインストールする。
$ pip install isort
デフォルトの動作について
サンプルコードを用意する。
urllib.parse
パッケージから parse_qs()
と urlparse()
関数の 2 つをインポートしている。
$ cat << 'EOF' > example.py from urllib.parse import parse_qs from urllib.parse import urlparse EOF
上記のファイルに isort を実行する。
$ isort example.py
すると、同じパッケージからのインポートなので 1 行にまとめられる。
$ cat example.py
from urllib.parse import parse_qs, urlparse
コマンドラインオプションで指定する
続いては、今回の本題である同じパッケージからのインポートであってもオブジェクトごとに 1 行ずつ分割する。
これには、コマンドラインオプションであれば --sl
または --force-single-line-imports
を指定すれば良い。
$ isort --sl example.py
実行すると、以下のように 1 行ずつに分割した形でインポートされる。
$ cat example.py
from urllib.parse import parse_qs
from urllib.parse import urlparse
設定ファイルで指定する
とはいえ、毎回コマンドラインオプションを指定するのも大変なので設定ファイルにしたい。
pyproject.toml ファイルを使う場合
まず、最近の Python のプロジェクトであれば pyproject.toml
を用意するのが一般的なはず。
ここで指定する場合には、次のような設定を追加する。
$ cat << 'EOF' >> pyproject.toml [tool.isort] force_single_line = true EOF
あとは、設定ファイルのある場所で isort コマンドを実行するだけ。
.isort.cfg ファイルを使う場合
pyproject.toml
を使わない場合には、専用の設定ファイルとして .isort.cfg
を用意すれば良い。
こちらを使う場合には、次のような設定を使う。
$ cat << 'EOF' > .isort.cfg [settings] force_single_line=True EOF
いじょう。