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

2025-02-28 08:22:00
admin
原创
84
摘要:问题描述:我在 Eclipse 中使用 PyDev 建立了一个 Python 项目,而 PyDev 一直在为我的代码生成错误。我有一个settings定义settings对象的模块。我在模块中导入该对象b并分配一个属性:from settings import settings settings.main =...

问题描述:

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

from settings import settings
settings.main = object()

在我的部分代码(但不是全部)中,有如下语句:

from settings import settings
print settings.main 

... 即使代码运行没有问题,Eclipse 代码错误窗格中也会生成“未定义来自导入的变量:main”消息。我该如何纠正这些问题?


解决方案 1:

对于项目中的代码,唯一的方法是添加一个声明,说明您期望 - 可能受保护以致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也有相关详细信息)。

解决方案 2:

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

我通过以下方式彻底消除了这些错误:

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

就是这样。

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

解决方案 3:

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

这个解决方案对我有用:

  • 转至Window - Preferences - PyDev - Interpreters - Python Interpreter

  • 转到Forced builtins标签

  • 点击New...

  • 输入模块名称(multiprocessing就我而言)并单击OK

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

解决方案 4:

我在 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。

解决方案 5:

这对我有用:

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

步骤 2)窗口 - 首选项 - PyDev - 解释器 - Python 解释器转到强制内置选项卡单击新建...输入模块名称(在我的情况下为 curses)并单击确定

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

解决方案 6:

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

解决方案 7:

我所做的事情的近似值:

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

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

解决方案 8:

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

解决方案 9:

在首选项 --> PyDev --> PyLint 下传递给 PyLint 的参数下添加以下行:

--generated-members=objects

您需要对每个生成的 执行此操作。我通过谷歌搜索找到了这个,但我丢失了参考资料。

解决方案 10:

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

解决方案 11:

我的回答并没有什么新意,只是我遇到的一个具体例子。

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)>

现在在窗口->首选项->PyDev->解释器->Python 解释器下,我选择了“强制内置”选项卡并将“gtk.gdk”添加到列表中。

现在错误信息不再显示。

解决方案 12:

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

  1. 确认(否则添加)模块的父文件夹到 PYTHONPATH。

  2. 将模块的完整名称添加到强制内置命令中。

这里要注意的是:

  • 一些流行的模块在安装时会有一些同名的父子对。在这些情况下,除了其祖父文件夹(您已为其他所有内容确认/添加了该文件夹)之外,您还必须将该父级添加到 PYTHONPATH。

  • 在添加到强制内置命令时,请使用(例如)“google.appengine.api.memcache”,而不是仅使用“memcache”,其中,此示例中的“google”是 PYTHONPATH 中定义的文件夹的直接子文件夹。

解决方案 13:

如果您确定脚本可以运行,并且是误报,请转到“首选项”>“PyDev”>“编辑器”>“代码分析”。将错误降级为警告。

在此处输入图片描述

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2941  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1803  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   31  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   31  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用