web-dev-qa-db-ja.com

PyDevの「インポートからの未定義変数」エラーを修正するにはどうすればよいですか?

EclipseでPyDevを使用するPythonプロジェクトがあり、PyDevはコードに対して誤ったエラーを生成し続けます。 settingsオブジェクトを定義するモジュールsettingsがあります。それをモジュールbにインポートし、次の属性を割り当てます。

from settings import settings
settings.main = object()

私のコードの一部では、すべてではありませんが、次のようなステートメント:

from settings import settings
print settings.main 

...コードは問題なく実行されますが、Eclipseコードエラーペインで「インポートから未定義の変数:メイン」メッセージを生成します。これらを修正するにはどうすればよいですか?

133
Chris B.

プロジェクト内のコードの場合、唯一の方法は、期待していたことを示す宣言を追加することです-if Falseによって保護され、実行されないようにする(静的コード分析は、実行時ではなく、表示されているもののみを見るinfo-そのモジュールを自分で開いた場合、mainが期待されていたことの表示はありません)。

これを克服するには、いくつかの選択肢があります。

  1. 外部モジュールである場合、forced builtinsに追加して、PyDevがランタイム情報を取得するためのシェルを生成するようにすることができます( http://pydev.org/manual_101_interpreter.html を参照) =詳細)-つまり、ほとんどの場合、PyDevはモジュールをシェルにインポートし、モジュール内で見つかったクラスに対してdir(module)およびdirを実行して補完を提示し、コード分析を行います。

  2. エラーのある行でCtrl + 1(Macの場合はCmd + 1)を使用すると、PyDevがコメントを追加してそのエラーを無視するオプションを表示します。

  3. stubモジュールを作成してpredefined補完に追加することができます( http://pydev.org/manual_101_interpreter.html にも詳細があります)。

151
Fabio Zadrozny

私はバイナリなどに依存するopencvを使用しているので、他のすべての行にこの愚かなエラーがあるスクリプトがあります。 Pythonは動的言語であるため、このような場合はエラーと見なすべきではありません。

私はこれらのエラーを完全に削除しました:

ウィンドウ->設定-> PyDev->エディター->コード分析->未定義->未インポートの変数->無視

それだけです。

また、ウィンドウ->設定-> PyDev->エディタ->コード分析->インポート->インポートが見つかりません->無視

47
ubershmekel

回答としてマークされた投稿は、解決策ではなく回避策を提供します。

この解決策は私のために働く:

  • Window - Preferences - PyDev - Interpreters - Python Interpreterに移動します
  • Forced builtinsタブに移動します
  • New...をクリックします
  • モジュールの名前(私の場合はmultiprocessing)を入力し、OKをクリックします

エラーメッセージが消えるだけでなく、モジュールメンバーも認識されます。

17
stenci

Eclipse/PyDevプロジェクトでも同様の問題が発生していました。このプロジェクトでは、pythonコードのルートディレクトリはプロジェクトのサブディレクトリでした。

--> MyProject
 + --> src         Root of python code
   + --> module1     A module 
   + --> module2     Another module
 + --> docs
 + --> test

プロジェクトがデバッグまたは実行されたとき、作業ディレクトリが正しい場所に設定されていたため、すべてが正常でした。ただし、PyDevコード分析では、module1またはmodule2からのインポートが見つかりませんでした。

解決策は、プロジェクトプロパティ-> PyDev-PYTHONPATHセクションを編集し、ソースフォルダータブから/ MyProjectを削除し、代わりに/ MyProject/srcを追加することでした。

9
Jules

これは私のために働いた:

ステップ1)インタープリターを削除し、再度自動構成する

ステップ2)ウィンドウ-設定-PyDev-インタープリター-Pythonインタープリター強制組み込みタブに移動新規...をクリックしますモジュールの名前(私の場合はcurses)を入力し、OKをクリックします

ステップ3)プロジェクトエクスプローラーで、エラーが発生しているモジュールを右クリックします。 PyDev->コード分析に進みます。

6
SJP

同じ問題がありました。 WindowsでPythonとEclipseを使用しています。コードは正常に実行されていましたが、Eclipseはどこでもエラーを表示します。フォルダ 'Lib'の名前を 'lib'(C:\ Python27\lib)に変更した後、問題は解決しました。文字の大文字と小文字が構成ファイルの大文字と一致しない場合、問題が発生することがあります(ただし、エラーチェックは長い間問題がないため、問題が突然明らかにならないため、理由)。

1
Leon

私がやっていたことの近似:

import module.submodule

class MyClass:
    constant = submodule.constant

パイリントはこう言った:E: 4,15: Undefined variable 'submodule' (undefined-variable)

インポートを次のように変更することでこれを解決しました。

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

注:インポートされた変数の名前も変更し、その定数の性質を反映するように大文字の名前を付けました。

1
ThorSummoner

環境設定で-> PyDev-> PyLintの下でPyLintに渡す引数この行を追加します:

--generated-members=objects

生成されたそれぞれに対してこれを行う必要があります。私はグーグルでこれを見つけましたが、参照を失いました。

0
Mark Mikofski

プロジェクトエクスプローラーで、エラーが発生しているモジュールを右クリックします。 PyDev->エラーマーカーの削除に移動します。

0
Chet

Eclipse内でpythonパスを再構成するだけで済みます。同様の質問に対する answer を参照してください。

0
oob

私の答えは新しいものには何も貢献せず、私が遭遇した具体的な例にすぎません。

import gtk.gdk

w = gtk.gdk.get_default_root_window()

PyDevは「インポートからの未定義変数:get_default_root_window()」というエラーメッセージを表示しました

pythonシェルでは、上記の回答で述べたように、これが「組み込み」モジュールであることがわかります。

>>> import gtk.gdk
>>> gtk.gdk
<module 'gtk.gdk' (built-in)>

ここで、「ウィンドウ」->「設定」->「PyDev」->「インタープリター」->「Pythonインタープリター」で、「Forced Builtins」タブを選択し、「gtk.gdk」をリストに追加しました。

これで、エラーメッセージは表示されなくなりました。

0
chrimuelle

これらの2つのステップは常に私にとってうまくいくと思います。

  1. モジュールの親フォルダーをPYTHONPATHに確認(または追加)します。
  2. モジュールのフルネームを強制ビルトインに追加します。

ここで注意すべきこと:

  • 一部の一般的なモジュールは、同じ名前の親と子のペアでインストールされます。これらのケースでは、他のすべてのために既に確認/追加した祖父母フォルダーに加えて、その親をPYTHONPATHに追加する必要があります。

  • (たとえば)強制ビルトインに追加する場合は「google.appengine.api.memcache」を使用します。「memcache」のみではなく、この例の「google」はPYTHONPATHで定義されたフォルダーの直接の子です。

0
Aikude