web-dev-qa-db-ja.com

Pythonインポート順序

私は、python)で大規模なプロジェクトに取り組んでいます。

  1. 一部のインポートはシステムインポートです。これらは簡単で、通常は完全にインポートされます。
  2. 一部のインポートはサードパーティです。これらは長くて不格好な絶対名を持つことができますが、明確に名前が付けられた単一の関数です(from ... importステートメントが必要)。最後に、一部には正規エイリアスがあります(import numpy as np)。
  3. 一部のインポートは、自分のパッケージからのもので、2つの階層レベルがあります。1つの最上位レベルには、コードを含むサブディレクトリが含まれています。

これらすべてを踏まえると、私が思いつくことができる最も読みやすいインポートスキーマは次のとおりです。

import aaa_sys
import bbb_sys

import aaa_third
from bbb_third import bb
import ccc_third as cc
import ddd_third

import .aaa_local
import .bbb_local
import ..aaa_remote.aaa_remote_module
import ..bbb_remote.bbb_remote_module

つまり、インポートのタイプ(絶対またはエイリアスまたは選択インポート)に関係なく、最初にシステムをアルファベット順にインポートし、次にサードパーティをインポートし、最後にライブラリをパッケージ化します。

これに対する業界で受け入れられているアプローチはありますか? Google C++ヘッダーのインポート順序に似たもの。

8
VF1

pep8よりも詳細な標準を探している場合は、 を参照してくださいhttps://github.com/PyCQA/flake8-import-order

rEADMEから

次のスタイルが直接サポートされています。

  • cryptography- の例を参照してください
  • google- Googleスタイルガイドライン で説明されているスタイル、 例を参照
  • smarkets-from X import ...ステートメントの前にgoogleステートメントを使用した場合のみimportとしてスタイル、 の例 を参照
  • appnexus-サードパーティパッケージのgoogleステートメントの後に続く、会社または組織にローカルなパッケージのimportステートメントでのみimportとしてスタイルを設定します。 を参照してください
  • edited- の例を参照してください
  • pycharm-インポートされた名前の大文字と小文字を区別するソートでのみsmarketsのスタイル
  • pep8-グループ内の順序を強制せずにグループのみを強制するスタイル

独自のスタイルを追加することもできます

9
David Chan

私はpythonエキスパートではないので、何か不足している可能性がありますが、私が知っている唯一のインポートオーダー標準は PEP8 です。

インポートは次の順序でグループ化する必要があります。

  1. 標準ライブラリのインポート
  2. 関連する第三者の輸入
  3. ローカルアプリケーション/ライブラリ固有のインポート

インポートの各グループの間に空白行を入れる必要があります。

pylint などの一部のツールは、コードがこの提案に違反すると警告を表示します。

これは、あなたがすでにやっていることのようです。標準には明記されていませんが、各グループ内でアルファベット順に並べ替えることも私にとって意味があります。

5
Andres F.