python

Python isortのflake8のimportエラー解消【PEP8準拠】

isortを並び替えたらエラーになった

pythonでパッケージを利用する際にisortを利用するのは必須です。

isortのインストール方法はこちらをご覧ください。

しかし、isortを利用することで困ることがあります。

isortで並び替えると自作パッケージを読む時に困る

自作のファイルを読むなどの場合にimport順番によって読み込めなくなることがあるためです。

今回は、PEP8にしたがってisortをしても適切な処理になるような工夫をご紹介します。

実際の例で見ていきましょう。

フォルダ構成は以下のようにしています。

app.py
test
└ test_app.py

isortする前の状態です。

自作パッケージを読む際にsysを使って、相対パスで読みたい時が出てきます。

# -*- coding: utf-8 -*-
import os
import sys
import unittest
sys.path.append(os.pardir)
import app as common

しかし、このtest_app.pyをisortをかけると

# -*- coding: utf-8 -*-
import os
import sys
import unittest

import app as common

sys.path.append(os.pardir)

sys.path…が最下部に行ってしまい、import appが読めなくなる可能性が出てきました。

これは困る。

isortのエラー解消方法は、参照用のファイルを作成する

pathmagic.pyをtest配下に追加。

app.py
test
├ test_app.py
└ _pathmagic.py

パスを読み込む部分を_pathmagic.pyに退避します。

ポイント:_pathmagic.pyにアンダースコアをつけてあげることで、app.pyよりisortで並び替えても先頭に来るようになります。

# -*- coding: utf-8 -*-
import os
import sys

sys.path.append(os.pardir)

元々、参照していた部分を消し、pathmagic.pyを読み込む処理を追加してあげます。

# -*- coding: utf-8 -*-
import _pathmagic # noqa
import unittest
import app as common

これで、isortに準拠しつつ、パッケージが読み込めるようになりました。

# noqaをつけるとインポートしたパッケージが利用されていなくても警告を出ません。

忘れるとunusedで怒られます。

たったこれだけの工夫ですが、非常に重要なテクニックです。

他の方法もあるようですが、私はこの方法が簡単なので多用しています。

みなさんもいろんな方法を試してみてください!

ABOUT ME
ロッピー
コンサルタントから2018年にエンジニアに転向。年収400万円のサラリーマンエンジニアから、半年で月収100万円を稼ぐエンジニアになった。 Python、Golangなど単価の高い言語を得意とする。