🎂

[Python]importの順番を自動でソートさせる

2021/05/02に公開

importの書く順番ってあるの?

pep8にインポートに関する記述がありました。

import文 は常にファイルの先頭、つまり モジュールコメントや docstring の直後、そしてモジュールのグローバル変数や定数定義の前に置くようにします。

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

  1. 標準ライブラリ

  2. サードパーティに関連するもの

  3. ローカルな アプリケーション/ライブラリ に特有のもの

https://pep8-ja.readthedocs.io/ja/latest/#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