このシナリオの場合:
b.py:
import A
# A is unused here
c.py:
from b import A
# A is used here
PyCharmはb.pyで「import A」は未使用のインポートであると文句を言い、Optimize importsはそれを削除し、c.pyのインポートを壊します
これらのチェーンされたインポートは良い方法ではありませんが(ファサードモジュールの実装に使用することはできますが)、それは私ですか、それともPyCharmの失敗ですか?
私が知る限り、この動作はnot検査またはその他の構成可能なオプションとして処理されます。つまり、インポートの前に配置できる#noinspection UnusedImport
(または同等のもの)はありません。
これらの変数を使用する未使用のブロックを定義したくない場合は、目的を達成するための別の簡単でおそらくより良い方法があります。
#b.py code
import A
# [...] your code
__all__ = ['A', ...] # *all* the names you want to export
PyCharmは__all__
を見て、未使用のインポートとしてA
を削除するのを避けるのに十分スマートです。ただし、__all__
は単純なリストリテラルでなければならないという制限があります。あなたできません次のようなことをします:
__all__ = ['A'] + [name for name in iterable if condition(name)]
でもない:
x = 'b'
__all__ = ['A', x]
__all__
を定義することは、モジュール*
- importを安全にインポートするためのベストプラクティスです。
実際にPyUnresolvedReferences
マーカーを使用して、インポートステートメントの検査を無効にできます。
# noinspection PyUnresolvedReferences
import A
参照: PyCharmバグPY-224
from C import A, B
assert A is not None and B is not None
# or:
_ = (A, B); del _
私のために働く。好きじゃない
# noinspection PyUnresolvedReferences
aをインポートできない場合に偽陰性を与えるためです。そして
__all__ = ['A', 'B', ...]
不可解であり、リファクタリングには不便です。