问题:如何修复PyDev“导入时未定义变量”错误?
我有一个在Eclipse中使用PyDev的Python项目,并且PyDev不断为我的代码生成错误错误。我有一个settings
定义settings
对象的模块。我将其导入模块b
并使用以下属性分配属性:
from settings import settings
settings.main = object()
在我的一些代码(但不是全部)中,语句如下:
from settings import settings
print settings.main
…即使在代码运行没有问题的情况下,也会在Eclipse代码错误窗格中生成“从import:main导入未定义的变量”消息。我该如何纠正?
回答 0
对于您项目中的代码,唯一的方法是添加一个声明,声明您希望-可能受到a的保护,if False
从而使其无法执行(如果您执行了静态代码分析,则只能看到您看到的内容,而不能看到运行时信息)自己打开该模块,则不会显示预期为main。
为了克服这个问题,有一些选择:
如果它是某个外部模块,则可以将其添加到,
forced builtins
以便PyDev为其生成外壳以获取运行时信息(有关详细信息,请参见http://pydev.org/manual_101_interpreter.html),即:大多数情况下,PyDev会将模块导入外壳中,并对模块中找到的类进行dir(module)
和dir
,以显示完成内容并进行代码分析。您可以在出现错误的行中使用Ctrl + 1(对于Mac为Cmd + 1),PyDev将为您提供一个添加注释的选项,以忽略该错误。
可以创建一个
stub
模块并将其添加到补全中predefined
(http://pydev.org/manual_101_interpreter.html上也有详细信息)。
回答 1
我正在使用opencv,它依赖于二进制文件等,所以我有脚本,其中每隔一行都有这个愚蠢的错误。Python是一种动态语言,因此不应将这种情况视为错误。
我通过以下步骤彻底删除了这些错误:
窗口->首选项-> PyDev->编辑器->代码分析->未定义->来自导入的未定义变量->忽略
就是这样。
也可能是,窗口->首选项-> PyDev->编辑器->代码分析->导入->找不到导入->忽略
回答 2
标为答案的帖子提供了一种解决方法,而不是解决方案。
此解决方案适用于我:
- 去
Window - Preferences - PyDev - Interpreters - Python Interpreter
- 转到
Forced builtins
标签 - 点击
New...
- 输入模块名称(
multiprocessing
以我为例),然后单击OK
错误消息不仅将消失,而且模块成员也将被识别。
回答 3
我在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。
回答 4
这对我有用:
步骤1)移除解释器,再次自动配置
步骤2)窗口-首选项-PyDev-解释器-Python解释器转到“强制内置”选项卡。单击“新建…”。输入模块名称(在我的情况下为curses),然后单击“确定”。
步骤3)右键单击项目浏览器中出现错误的模块。转到PyDev->代码分析。
回答 5
我有同样的问题。我在Windows上使用Python和Eclipse。该代码运行得很好,但是Eclipse到处都会显示错误。将文件夹“ Lib”的名称更改为“ lib”(C:\ Python27 \ lib)之后,问题得以解决。看来,如果字母的大写字母与配置文件中的字母不匹配,这有时会引起问题(但似乎并不总是这样,因为错误检查很长一段时间就可以在问题突然出现之前很明显了原因)。
回答 6
我正在做什么的一个近似值:
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
注意:我还使用导入的变量重命名了名称,以反映其常量性质。
回答 7
您可能只需要在Eclipse中重新配置python路径。见我的回答对一个类似问题。
回答 8
在首选项-> PyDev-> PyLint 传递给PyLint的参数下添加以下行:
--generated-members=objects
您将需要针对每个生成的进行此操作。我通过谷歌搜索找到了这个,但是我丢失了参考。
回答 9
在项目浏览器中右键单击出现错误的模块。转到PyDev->删除错误标记。
回答 10
我的回答没有任何新贡献,只是我遇到的一个具体例子。
import gtk.gdk
w = gtk.gdk.get_default_root_window()
PyDev显示错误消息“来自导入的未定义变量: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”添加到列表中。
现在错误消息不再显示。
回答 11
我发现这两个步骤一直对我有用:
- 确认(否则添加)模块的父文件夹到PYTHONPATH。
- 将模块的全名添加到强制内置。
这里要注意的事情:
一些流行的模块会安装一些具有相同名称的父对子对。在这些情况下,除了已确认/添加的其他父项文件夹之外,还必须将该父项添加到PYTHONPATH中。
当添加到强制内置时,请使用(例如)“ google.appengine.api.memcache”,而不是仅使用“ memcache”,在此示例中,“ google”是PYTHONPATH中定义的文件夹的直接子代。
回答 12
如果确定脚本已运行并且是错误警报,请转至“首选项”>“ PyDev”>“编辑器”>“代码分析”。将错误降级为警告。