我如何解决PyDev“未定义的variables从导入”错误?

我有一个在Eclipse中使用PyDev的Python项目,PyDev不断为我的代码生成错误的错误。 我有一个定义settings对象的模块settings 。 我在模块b导入,并分配一个属性:

 from settings import settings settings.main = object() 

在我的一些代码中,但不是全部,代码如下:

 from settings import settings print settings.main 

…在Eclipse代码错误窗格中生成“来自import:main的未定义variables”消息,即使代码运行没有问题。 我怎样才能纠正这些?

对于你的项目中的代码,唯一的办法是添加一个声明,说你期望 – 可能受if False保护,这样它就不会执行(静态代码分析只看到你看到的,而不是运行时信息 -如果你自己打开这个模块,你就不会有任何迹象表明main是预期的)。

为了克服这个,有一些select:

  1. 如果它是一些外部模块,可以将它添加到forced builtins这样PyDev就可以生成一个shell来获取运行时信息(参见http://pydev.org/manual_101_interpreter.html了解细节); PyDev会将模块导入到一个shell中,并对模块中find的类执行dir(module)dir以呈现完成并进行代码分析。

  2. 您可以在出现错误的行中使用Ctrl + 1(Mac + Cmd + 1),PyDev会显示一个选项来添加注释以忽略该错误。

  3. 有可能创build一个stub模块,并将其添加到predefined完成( http://pydev.org/manual_101_interpreter.html也有详细说明)。;

我使用的opencv依赖于二进制文件等,所以我有脚本,其他每一行都有这个愚蠢的错误。 Python是一种dynamic语言,所以这样的场合不应该被视为错误。

我完全删除了这些错误:

窗口 – >首选项 – > PyDev – >编辑器 – >代码分析 – >未定义 – >未定义variables从导入 – >忽略

就是这样

它也可能是,窗口 – >首选项 – > PyDev – >编辑器 – >代码分析 – >导入 – >导入未find – >忽略

标记为答案的post给出了解决方法,而不是解决scheme。

这个解决scheme适用于我:

  • 转到Window - Preferences - PyDev - Interpreters - Python Interpreter
  • 转到Forced builtins选项卡
  • 点击New...
  • input模块的名称(在我的情况下是multiprocessing ),然后单击OK

错误信息不仅会消失,模块成员也将被识别。

我和Eclipse / PyDev项目有类似的问题。 在这个项目中,python代码的根目录是该项目的一个子目录。

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

当项目被debugging或运行时,一切都很好,因为工作目录被设置为正确的地方。 然而,PyDev代码分析无法从模块1或模块2中find任何input。

解决scheme是编辑项目属性 – > PyDev – PYTHONPATH部分,并从源文件夹选项卡中删除/ MyProject,并将/ MyProject / src添加到它。

这对我工作:

步骤1)删除解释器,再次自动configuration

步骤2)窗口 – 首选项 – PyDev – 解释器 – Python解释器转到强制内置选项卡单击新build…键入模块的名称(在我的情况下,诅咒),然后单击确定

步骤3)右键单击项目浏览器中的哪个模块发生错误。 进入PyDev->代码分析。

我有同样的问题。 我在Windows上使用Python和Eclipse。 代码运行得很好,但是Eclipse到处都显示错误。 将文件夹“Lib”的名称更改为“lib”(C:\ Python27 \ lib)之后,问题就解决了。 看起来,如果字母的大小写与configuration文件中的字母不匹配,这有时会导致问题(但似乎并非总是如此,因为在问题突然出现之前,错误检查很长时间没有出现原因)。

我正在做的近似:

 import module.submodule class MyClass: constant = submodule.constant 

pylint说: E: 4,15: Undefined variable 'submodule' (undefined-variable)

我通过改变我的导入解决了这个问题:

 from module.submodule import CONSTANT class MyClass: constant = CONSTANT 

注意:我也通过导入的variables重命名,使其具有大写名称以反映其不变性。

有可能你只需要在Eclipse中重新configuration你的pythonpath。 看到我对类似问题的回答。

在首选项 – > PyDev – > PyLint下的parameter passing给PyLint添加这一行:

 --generated-members=objects 

你将需要为每个生成的。 我通过Googlesearchfind了这个,但我失去了参考。

右键单击项目浏览器中的哪个模块发生错误。 转到PyDev->删除错误标记。

我的回答没有提供任何新东西,只是我遇到的一个具体的例子。

 import gtk.gdk w = gtk.gdk.get_default_root_window() 

PyDev显示错误消息“Undefined variable from import:get_default_root_window()”

在python shell中,你可以看到这是一个“内置”模块,如上面的答案中所提到的:

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

现在在Window-> Preferences-> PyDev-> Interpreters-> Python Interpreter下,我选中了“Forced Builtins”选项卡,并在列表中添加了“gtk.gdk”。

现在错误消息不再显示。

我发现这两个步骤一直为我工作:

  1. 确认(否则添加)模块的父文件夹到PYTHONPATH。
  2. 将模块的完整名称添加到强制内置。

这里要注意的事项是:

  • 一些stream行的模块安装有一些同名的父母和子女对。 在这些情况下,您还必须将该父项添加到PYTHONPATH中,除了已经为其他所有项目确认/添加的祖父文件夹之外。

  • 使用(例如)“google.appengine.api.memcache”添加到强制内置时,而不是“memcache”,本例中的“google”是PYTHONPATH中定义的文件夹的直接子节点。