我如何解决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:
-
如果它是一些外部模块,可以将它添加到
forced builtins
这样PyDev就可以生成一个shell来获取运行时信息(参见http://pydev.org/manual_101_interpreter.html了解细节); PyDev会将模块导入到一个shell中,并对模块中find的类执行dir(module)
和dir
以呈现完成并进行代码分析。 -
您可以在出现错误的行中使用Ctrl + 1(Mac + Cmd + 1),PyDev会显示一个选项来添加注释以忽略该错误。
-
有可能创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”。
现在错误消息不再显示。
我发现这两个步骤一直为我工作:
- 确认(否则添加)模块的父文件夹到PYTHONPATH。
- 将模块的完整名称添加到强制内置。
这里要注意的事项是:
-
一些stream行的模块安装有一些同名的父母和子女对。 在这些情况下,您还必须将该父项添加到PYTHONPATH中,除了已经为其他所有项目确认/添加的祖父文件夹之外。
-
使用(例如)“google.appengine.api.memcache”添加到强制内置时,而不是“memcache”,本例中的“google”是PYTHONPATH中定义的文件夹的直接子节点。