1. ホーム
  2. python

[解決済み] PEP8 - import が sys.path でファイルの先頭に来ない。

2023-01-18 23:25:11

質問

問題点

PEP8には、importをファイルの先頭に置くというルールがあります。

インポートは常にファイルの先頭に置かれ、モジュールコメントとドキュメント文の直後で、モジュールグローバルと定数の前に置かれます。

しかし、特定のケースでは、私は次のようなことをしたいかもしれません。

import sys
sys.path.insert("..", 0)

import my_module

この場合 pep8 コマンドラインユーティリティが私のコードにフラグを立てます。

E402 モジュールレベルのインポートがファイルの一番上にありません。

でPEP8準拠を達成するための最良の方法は何でしょうか? sys.path の修正でPEP8準拠を達成する最善の方法は何ですか?

なぜ

私がこのコードを持っているのは、次のような理由からです。 プロジェクトの構造 で与えられた Pythonのヒッチハイク・ガイド .

そのガイドでは、私は my_module フォルダーとは別に tests フォルダとは別のもので、どちらも同じディレクトリにあります。もし私が my_module から tests を追加する必要があると思います。 ..sys.path

どのように解決するのですか?

サブディレクトリにテスト用のファイルが複数あることがよくあります。 foo/tests に、テストしているモジュールは foo/src . テストを実行するために foo/tests からインポートエラーなしにテストを実行するために、私はファイル foo/tests/pathmagic.py を作成すると、次のようになります。

"""Path hack to make tests work."""

import os
import sys

bp = os.path.dirname(os.path.realpath('.')).split(os.sep)
modpath = os.sep.join(bp + ['src'])
sys.path.insert(0, modpath)

すべてのテストファイルにおいて、私は

import pathmagic  # noqa

を最初のインポートとして使用します。noqa"コメントによって pycodestyle / pep8 を、未使用のインポートに関する苦情から削除しました。