PEP8 は以下を示唆しています:
インポートは、次の順序でグループ化する必要があります。
- 標準ライブラリのインポート
- 関連する第三者の輸入
- ローカルアプリケーション/ライブラリ固有のインポート
インポートの各グループの間に空白行を挿入する必要があります。
pylint
、pyflakes
、pychecker
、pep8
などの静的コード分析ツールを使用して、パッケージのどこかで標準に違反しているかどうかを確認する方法はありますか?
違反の例:
from my_package import my_module
from Django.db import models
import os
インポートする正しい方法:
import os
from Django.db import models
from my_package import my_module
現在のバージョンのpylintはこれを実行し、エラークラスC0411として報告します。
更新(2016): sbywater に最新の回答があります。
それを見つけた! (偶然、「Pythonのハッカーのガイド」を読んでいる間)
OpenStack Hacking Style Checksという名前のプロジェクト hacking は、いくつかのユニークな flake8
拡張を導入します。その中に hacking_import_groups があります(関連する commit )。
例:
要件
例で使用されるファイル
tox.ini
(カスタムチェックを使用することをflake8に伝える必要があります)
[hacking]
local-check = hacking.core.hacking_import_groups
UPD:hacking
の最新バージョンでは、チェックへのパスが変更され、現在はhacking.checks.imports.hacking_import_groups
です。
test.py
(チェックの対象)
import requests
import sys
from my_module import print_smth
print_smth(requests.get('https://google.com'))
print_smth(sys.version)
my_module.py
(test.py
で使用されるローカルインポート)
def print_smth(smth):
print smth
次に、flake8
に対してtest.py
を実行すると、
$ flake8 test.py
test.py:2:1: H305 imports not grouped correctly (requests: third-party, sys: stdlib)
test.py:3:1: H305 imports not grouped correctly (sys: stdlib, my_module.print_smth: project)
test.py:3:1: H306 imports not in alphabetical order (sys, my_module.print_smth)
次に、PEP8
に続く正しい順序でインポートをグループ化すると、
import sys
import requests
from my_module import print_smth
print_smth(requests.get('https://google.com'))
print_smth(sys.version)
警告は見つかりませんでした:
$ flake8 test.py
$
これが将来誰かを助けることを願っています。
https://pypi.python.org/pypi/isort または https://github.com/timothycrosley/isort をご覧ください
isortは、指定されたファイルをグローバルレベルのインポート行(try以外のインポート、ブロック、関数などを除く)で解析し、それらをすべてインポートの種類ごとにグループ化されたファイルの先頭に配置します。
- 未来
- Python標準ライブラリ
- 第三者
- 現在のPythonプロジェクト
- 明示的にローカル(インポート前、from:import xなど)
カスタム個別セクション(構成ファイルのforced_separateリストで定義)各セクション内で、インポートはアルファベット順にソートされます。 isortは重複したpythonインポートを自動的に削除し、インポートから指定された行の長さまでの長さをラップします(デフォルトは80)。
https://pypi.python.org/pypi/flake8-isort この機能をflake8にプラグインします
flake8
プラグインが存在します: flake8-import-order 。
このパッケージは、3つの新しいflake8警告を追加します
I100:インポートステートメントの順序が間違っています。
I101:fromインポートの名前の順序が間違っています。
I201:セクションまたはインポートの間に改行がありません。