私は次のように組織されたプロジェクトをPycharmに持っています:
-- Sources
|--__init__.py
|--Calculators
|--__init__.py
|--Filters.py
|--Controllers
|--__init__.py
|--FiltersController.py
|--Viewers
|--__init__.py
|--DataVisualization.py
|--Models
|--__init__.py
|--Data
すぐ上のSourcesを除くすべての__init__.pyは空のファイルです。私はこの種の多くの警告を受けています:
__init__.pyで参照 'xxx'が見つかりません
たとえば、私のFiltersController。pyには次のコードが含まれています。
import numpy.random as npr
bootstrap = npr.choice(image_base.data[max(0, x-2):x+3, max(0, y-2):y+3].flatten(), size=(3, 3), replace=True)
そして、私はこの警告を受け取ります:
__init__.pyに参照 'choice'が見つかりません
私はこれが何を意味し、Pythonで適切にコーディングするにはどうすればよいのか疑問に思っています。
前もって感謝します。
これは、pycharmのバグです。 PyCharmは、参照モジュールが__all__ = []
ステートメントに含まれることを期待しているようです。
適切なコーディングエチケットのために、モジュールからの__all__
ステートメントを含める必要がありますか? ..これは実際に、テスト中に若いスポックが答えるのを聞いた質問であり、彼はそれに答えました:「それは道徳的に称賛に値するが、道徳的に義務ではない」。
それを回避するには、単にそれを無効にすることができます (極めて重要ではない) (非常に有用)グローバルに検査するか、特定の機能またはステートメントに対して検査を抑制します。
そうするために:
PyCharmにはこのような小さなバグがありますが、私の意見では、その利点は欠点をはるかに上回ります。別の優れたIDEを試してみたい場合は、Spyder/Spyderlibもあります。
あなたが質問をした後、これはかなりの時間がかかることを知っていますが、これがあなたやあなたの誰かに役立つことを願っています。
編集:もともと、これは__all__
のチェックに固有のものだと思っていましたが、より一般的な「未解決の参照」チェックのように見え、非常に便利です。上記のメニューを使用するか、ステートメントの前の行に# noinspection PyUnresolvedReferences
を指定して、ステートメントレベルの機能の無効化を使用することをお勧めします。
最初に this を見てください。これは、パッケージをインポートするとどうなるかを説明しています。便宜上:
Importステートメントは次の規則を使用します。パッケージの
__init__.py
コードが__all__
という名前のリストを定義している場合、from package import *
が検出されたときにインポートされるモジュール名のリストになります。パッケージの新しいバージョンがリリースされたときにこのリストを最新の状態に保つのはパッケージの作成者次第です。また、パッケージの作成者は、パッケージから*をインポートする使用法が見つからない場合、サポートしないことを決定する場合があります。
したがって、PyCharmは警告メッセージを表示することでこれを尊重し、パッケージから*をインポートするときに作成者がインポートするモジュールを決定できるようにします。したがって、これはPyCharmの便利な機能のようです(これをバグと呼ぶことは決してできません)。この警告は、リストの__all__
変数にパッケージをインポートするときにインポートするモジュールの名前を追加することで簡単に削除できます。
__init__.py
from . import MyModule1, MyModule2, MyModule3
__all__ = [MyModule1, MyModule2, MyModule3]
これを追加した後、プロジェクトの他の部分で使用されているこれらのモジュール名をctrl+click
すると、宣言に直接ジャンプできます。
私はこれが古いことを知っていますが、グーグルがここに私を送ったので、他の人も私と同じように来るでしょう。
2018年の答えはここで選択されたものです Pycharm:作業中のプロジェクトを開くときのIDEの「未解決の参照」エラー
追加できるのは1つのContent Root
だけですが、複数のSource Folders
を追加できることに注意してください。 init。pyファイルに触れる必要はありません
パッケージにinit。pyを追加するのを忘れましたか?