pythonスタイルガイド は、インポートを次のようにグループ化することを提案しています。
インポートは、次の順序でグループ化する必要があります。
- 標準ライブラリのインポート
- 関連する第三者の輸入
- ローカルアプリケーション/ライブラリ固有のインポート
ただし、インポートの2つの異なる方法をどのようにレイアウトするかについては何も言及していません。
from foo import bar
import foo
それらをソートするには複数の方法があります(それらすべてのインポートが同じグループに属していると仮定しましょう):
最初にfrom..import
、次にimport
from g import gg
from x import xx
import abc
import def
import x
最初にimport
、次にfrom..import
import abc
import def
import x
from g import gg
from x import xx
インポートの種類を無視した、モジュール名によるアルファベット順
import abc
import def
from g import gg
import x
from xx import xx
PEP8はこれの優先順序について言及しておらず、「クリーンアップインポート」機能の中には、おそらくその機能の開発者が好むものであれば何でもできるIDEがあります。
これを明確にする別のPEP、または BDFL(または別のPythonコア開発者)。 自分の好みを示す主観的な回答を投稿しないでください。
通常、インポートはアルファベット順にソートされ、PEP 8の横のさまざまな場所で説明されます。
アルファベット順でソートされたモジュールは、読みやすく検索可能です。結局、pythonはすべて読みやすさについてです。また、何かがインポートされたことを確認しやすくなり、インポートの重複を回避できます
並べ替えに関してPEP 8で利用できるものは何もありません。
評判の良いサイトやリポジトリからのいくつかの参照も人気があるということで、アルファベット順が道です。
たとえば次のように:
import httplib
import logging
import random
import StringIO
import time
import unittest
from nova.api import openstack
from nova.auth import users
from nova.endpoint import cloud
OR
import a_standard
import b_standard
import a_third_party
import b_third_party
from a_soc import f
from a_soc import g
from b_soc import d
Redditの公式リポジトリには、一般にPEP-8のインポート順序を使用する必要があると記載されています。しかし、いくつかの追加があります
for each imported group the order of imports should be:
import <package>.<module> style lines in alphabetical order
from <package>.<module> import <symbol> style in alphabetical order
参照:
PS: isort utility はインポートを自動的にソートします。
CIAの内部コーディング規則( WikiLeaks Vault 7リーク の一部)によると、pythonインポートは3つのグループにグループ化する必要があります。
インポートは、大文字と小文字を区別せずに、これらのグループ内で辞書順に並べる必要があります。
import foo
from foo import bar
from foo.bar import baz
from foo.bar import Quux
from Foob import ar
PEP 8はそれについては何も言っていません。この点に慣習はなく、Pythonコミュニティが絶対に定義する必要があるという意味ではありません。選択はプロジェクトにとっては良いことですが、別のプロジェクトにとっては最悪です...各ソリューションには賛否両論があるため、これは好みの問題です。ただし、規則に従う場合は、引用した主な順序を尊重する必要があります。
たとえば、 Googleはこのページで推奨インポートは各カテゴリ(標準/サードパーティ/あなたのもの)で辞書式にソートする必要があります )。しかし、Facebook、Yahoo、その他何でも、それは別のコンベンションかもしれません...
すべてのimport x
ステートメントはx
の値でソートされ、すべてのfrom x import y
ステートメントはx
の値でアルファベット順にソートされ、ソートされたfrom x import y
ステートメントのグループはimport x
ステートメントのソートされたグループに従う必要があります。
import abc
import def
import x
from g import gg
from x import xx
from z import a