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


138

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

from settings import settings
settings.main = object()

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

from settings import settings
print settings.main 

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


私はこれらの回答でpylintに関連するものを何も見ませんでした:\これがこの通知の出所であると思います、そしてそれが変数ではなく、それがインポートであることをpylintに伝える方法を見つけたいと思っていました。
ThorSummoner 2015

回答:


156

プロジェクト内のコードの場合、唯一の方法はif False、それが実行されないようにによって保護されている可能性があることを宣言した宣言を追加することです(静的コード分析は、ランタイム情報ではなく、表示されているもののみを表示します)。そのモジュールを自分で開いた場合、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にも詳細があります)。


1
強制ビルトインにモジュールを追加しても役に立たない場合があります(sourceforge.net/tracker/…などのこのバグを参照)
Boris Gorelik

@ファビオ:事前定義された補完はここで使用できますか?そして、あなたがこのようなことをする場合、どのようなオプションがありtry: import a; except: a=mockModuleますか?コメントなしでこれらを抑制する方法はありますか?
2012年

8
私はCtrl-1を試しましたが、注釈を追加する '@UndefinedVariable'が得られ、それは機能します。ありがとう。
RichMeister 2013年

最新のEclipseとPyDevでも同じ問題が発生しています。すべてのモジュール間を移動できるのに、なぜコード分析では同じことができないのですか?
Adam

3
極端に進む前に、ディレクトリがPYTHONPATHにあることを確認してから、Eclipseを終了/再起動し、[プロジェクト]> [Pydev]> [エラーマーカーを削除]を実行すると、強制ビルドインに numpyが表示されます。
smci

49

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

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

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

そして、それはそれです。

ウィンドウ->設定-> PyDev->エディタ->コード分析->インポート->インポートが見つかりません->無視することもできます


8
これをありがとう。シンプルで簡単です。ただし、「インポートが見つかりません」設定を「無視」に変更する代わりに、「警告」に変更しました。今は何も表示しません。:)願わくば、REALインポートに問題がある場合は警告が表示されます。
愛と平和-Joe Codeswell 2012

1
変更を有効にするためにEclipseを再起動する必要がありました。
スペッテカカ2018

21

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

この解決策は私にとってはうまくいきます:

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

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


1
「回答としてマークされた投稿」がPyDevの開発者によって書かれたものであることを考えると、おそらくもう一度見直す必要があります。彼はあなたが指定した指示にリンクしているので、投稿自体に明示的な指示を与えていません。
coredumperror 2015

5
@CoreDumpError誰が投稿したかは気にしません。私は投稿が説明していることを試してみましたが、それは機能しますが、解決策ではなく回避策です。私が説明することは他のコンピュータではうまくいかないかもしれませんが、私にとってはうまくいき、正しい解決策です。他の投稿がソリューションを説明するのではなくリンクする場合、それはガイドラインに従っていません。私は、他の人に役立つことを期待して、私にとって何が良いソリューションであるかを説明することによってガイドラインに従いました。
stenci 2015

2
@Isaac変更されました。編集する前に回答を投稿しました。
stenci 2017年

はい、これははるかに優れたよりクリーンなソリューションです!マスキングまたは非表示にする代わりに、正当な修正を提供します。追加しなければなりreませんでしたが、次のようなものに赤インクを使用しなくなりましたre.M
Bostone

10

私は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を追加することでした。


これが実際に完全に機能することの確認を提供したかっただけです。
Amndeep7 2013年

はい、メインメニューのProject / Properties / PyDev-PYTHONPATHに行き、アプリに必要なすべてのパスを追加して、問題を解決しました!
Kostyantyn 2013

6

これは私のために働きました:

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

ステップ2)ウィンドウ-設定-PyDev-インタープリター-Pythonインタープリター[強制ビルトイン]タブに移動します。

手順3)プロジェクトエクスプローラーで、エラーが発生しているモジュールを右クリックします。PyDev-> Code analysisに移動します。


現在受け入れられている回答よりも各ステップをより明確にしてくれてありがとう。
sc28

1

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


4
これはEclipseのお気に入りの娯楽です。エラーフラグを作成することは、理由もなく突然表示されます。それは人々がTHE WORLDを破ったと狂気に思っている人々を
駆り立て

私はこれを試してみましたが、うまくいったと思いましたが、それは単なる策略でしたが、5分以上かかったため、元に戻すことはできません。ただし、@ Fabio Zadrozny ctrl-1 @UndefinedVariableは完全に機能し、5分後も引き続き機能します。
Mark Mikofski、2013年

1

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

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

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


0

Eclipse内でpythonパスを再構成する必要があるだけの可能性があります。同様の質問に対する私の回答を参照してください。


0

設定-> PyDev-> PyLint に渡す引数の下のPyLintに、次の行を追加します。

--generated-members=objects

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


0

エラーが発生しているモジュールでプロジェクトエクスプローラーを右クリックします。PyDev-> Remove Error Markersに移動します。


0

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

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インタープリターの下で、「強制ビルトイン」タブを選択し、リストに「gtk.gdk」を追加しました。

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


0

私はこれらの2つのステップが常に私にとってうまくいくことを発見しました:

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

ここで注意すべき点:

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

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


強制ビルトインにlib.site-packages._pytestを追加するにはどうすればよいですか?「-」記号を受け入れていません...構成モジュールでインポートの問題があり、解決策を実行しようとしています。助けてください
熱心な

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.