1. ホーム
  2. パイソン

[解決済み】Pythonの`import x`と`from x import y`の文の正しいソート方法は何ですか?

2022-04-09 04:49:27

質問

その Pythonスタイルガイド は、インポートをこのようにグループ化することを提案しています。

<ブロッククオート

インポートは以下の順序でグループ化する。

  1. 標準ライブラリのインポート
  2. 関連するサードパーティのインポート
  3. ローカルアプリケーション/ライブラリ固有のインポート

しかし、この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 にある "cleanup imports" 機能も、おそらくその機能の開発者が望んだとおりにしているだけでしょう。

この点を明確にした別の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

または

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のインポート順序を使用するようにと記載されています。しかし、いくつかの追加事項があり、各インポートグループのインポートの順番はこうあるべきです。

import <package>.<module> style lines in alphabetical order
from <package>.<module> import <symbol> style in alphabetical order

参考文献

追記 アイソートユーティリティ は、インポートを自動的にソートします。