[Python]importの順番を自動でソートさせる
importの書く順番ってあるの?
pep8にインポートに関する記述がありました。
import文 は常にファイルの先頭、つまり モジュールコメントや docstring の直後、そしてモジュールのグローバル変数や定数定義の前に置くようにします。
import文 は次の順番でグループ化すべきです:
標準ライブラリ
サードパーティに関連するもの
ローカルな アプリケーション/ライブラリ に特有のもの
標準ライブラリは、pip installしなくても使えるような、json,os,sysなどを示しています。
逆にサードパーティはpip installが必要なもの。という認識でいいと思います。pandasとかnumpyとかですね。
最後に自分が作ったファイルのインポートです。
あと、明記されていない?ようですが、一般的にアルファベット順に並べると良いみたいです。
参考:https://pep8-ja.readthedocs.io/ja/latest/#import
自動でimport順をソートしたい
importの順番があるのはわかったけど、自分でアルファベット順を考慮して書くのすごくしんどい(パッとアルファベットの順番判断できない。。。)
どうにか、その辺formatterでうまいことできないかなーと調べていたら、やり方が出てきたのでまとめました。
※autopep8, yapf, blackなどのフォーマッターでやってくれない(?)みたいです。
vscodeの設定手順
私のメインエディタはvscodeなのでvscodeで実現する方法を紹介します。
isortをインストール
isortというライブラリが必要らしいのでインストールします。しかし、他のライブラリをインストールした時にひっついてきたのか、すでに入っていたので私はインストールしていません。
とりあえず最初に存在を確かめて、なかったらインストールしましょう。
pip show isort
pip install isort
(vscodeの設定)設定のCode Actions On Save開く
cmd
+,
を入力するなどして、設定を開きます。(左下の歯車のマークをクリックして飛んでもOKです)
設定を開いたら検索窓に「code actions」など打ち込んで出します。
「setting.jsonで編集」をクリックします
(vscodeの設定)settings.jsonを書き換える
デフォルトでnullになっているので、それを書き換えます。
{
......
"editor.codeActionsOnSave": null
}
{
......
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
}
まとめ
今回は、vscode上でPythonスクリプト内のimport順を自動でソートする方法を解説しました。
このあたりって、autopep8がやってくれると思ってたんですが、そうじゃないんですね。やってくれたら便利だったのに。
Discussion