我如何修复 PyDev“未定义的变量从导入”错误?

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

from settings import settings
settings.main = object()

在我的一些代码中——但不是全部,像这样的语句:

from settings import settings
print settings.main

... 在 Eclipse 代码错误窗格中生成“ UnDefinition variable from import: main”消息,即使代码运行没有问题。我怎样才能纠正这些错误呢?

120349 次浏览

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

为了克服这一点,我们有一些选择:

  1. 如果它是某个外部模块,可以将其添加到 forced builtins,这样 PyDev 就会生成一个 shell,以便它获取运行时信息(详见 http://pydev.org/manual_101_interpreter.html)——也就是说: 大多数情况下,PyDev 将导入 shell 中的模块,并对模块中找到的类执行 dir(module)dir,以显示完成操作并进行代码分析。

  2. 您可以在一行中使用 Ctrl + 1(Mac 使用 Cmd + 1) ,并且 PyDev 将提供一个选项来添加注释以忽略该错误。

  3. 可以创建一个 stub模块并将其添加到 predefined完成(http://pydev.org/manual_101_interpreter.html也有这方面的详细信息)。

您可能只需要在 Eclipse 中重新配置 Python 路径。请参阅我的 回答来回答类似的问题。

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

我使用的 opencv 依赖于二进制文件等,所以我有脚本,其他每一行都有这个愚蠢的错误。Python 是一种动态语言,因此这种情况不应被视为错误。

我去掉了所有这些错误:

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

就是这样。

也可能是, Window-> Preferences-> PyDev-> Editor-> Code Analysis-> Import-> Import not found-> Ignore

我在 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 添加到其中。

在参数设置中—— > PyDev —— > PyLint 在 要传递给 PyLint 的参数下面添加这一行:

--generated-members=objects

您将需要为每个生成的。我通过谷歌找到了这一点,但我失去了参考。

右键单击项目资源管理器中出现错误的模块。转到 PyDev-> 删除错误标记。

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

import gtk.gdk


w = gtk.gdk.get_default_root_window()

PyDev 显示了错误消息“ UnDefinition 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 下,我选择了选项卡“强制内建”并将“ gtk.gdk”添加到列表中。

现在不再显示错误消息。

大概就是我当时在做的事情:

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

注意: 我还通过导入变量重命名为大写名称,以反映其常量性质。

标记为答案的帖子提供了一个变通方案,而不是一个解决方案。

这个解决方案对我很有效:

  • 转到 Window - Preferences - PyDev - Interpreters - Python Interpreter
  • 转到 Forced builtins选项卡
  • 点击 New...
  • 键入模块的名称(在我的示例中为 multiprocessing)并单击 OK

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

我发现这两个步骤一直对我有效:

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

这里需要注意的是:

  • 一些流行的模块安装时父模块和子模块具有相同的名称。在这些情况下,你还必须将父文件夹添加到 PYTHONPATH,除了它的祖父文件夹,你已经确认/添加了所有其他文件夹。

  • 在添加强制内建时使用“ google.appeng.api.memcache”,而不是“ memcache”,这个例子中的“ google”是 PYTHONPATH 定义的文件夹的直接子文件夹。

这对我很有效:

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

步骤2) Window-Preferences-PyDev-Interpreters-Python Interpreter 转到“强制内建”选项卡 点击新建..。 键入模块的名称(在我的示例中为 curses)并单击 OK

步骤3)在项目资源管理器中右键单击出现错误的模块。转到 PyDev-> 代码分析。

如果您确定您的脚本正在运行,并且它是一个错误的警报,那么转到 Preferences > PyDev > Editor > Code Analysis。将错误降级为警告。

enter image description here

Http://www.pydev.org/manual_adv_code_analysis.html