5

在我的脚本中,我使用:

python from pkg_resources import resource_filename

PyDev 和 pylint 0.23 都在这里抱怨未解决的导入。

E0611 No name 'resource_filename' in module 'pkg_resources'

据我了解,这是因为 PyDev 和 pylint 都只执行源代码分析,而没有实际尝试解析/编译它。并且显然pkg_resources做了一些特别的定义pkg_resources。包装和符号当然在那里,整个事情都很好。两个问题:

  • 我怎样才能让 Eclipse 和 PyDev 都相信他们错了?
  • 首先是什么导致了这个问题?我还没有发现其他人有这种问题,我怀疑我的情况有些独特...... :)

Python 2.7.1(在 OSX 下),分发 0.6.19。

4

2 回答 2

6

您可以通过修改项目的 pydev python 解释器定义来加载麻烦的动态模块。配置“强制内置”的默认列表以包含您使用的动态生成的定义。通过对动态生成的类进行脱壳和加载/检查来生成强制内置函数。

在 python 解释器定义(preferences => pydev => interpreters => python interpreter)中,为您的 pydev 项目选择当前使用的解释器。选择Forced Builtins选项卡。按下New...按钮,然后添加pkg_resources到列表中。

我已经这样做了,现在我的错误消失了,方法的自动完成对我的项目来说可以正常工作。我正在使用 python 2.7.9、pydev 3.3.3 和 eclipse kepler r2。

对于 pylint,您可以在项目的 pylint config 中全局禁用警告,针对整个文件,或针对其使用的一个实例。您可以# pylint: disable=E1101在文件开头添加注释以禁用该模块,或者在上面使用它的行上仅针对该实例禁用它。还有一种可能很耗时的方法来手动提示 pylint 你的类有特定的方法

于 2015-06-18T21:25:51.073 回答
3

我有同样的问题。对于 Pydev,我在 pydev.org 上找到了答案:转到错误行,按 ctrl-1,然后选择“未定义变量”。然后它会附加一条#@UndefinedVariable评论,错误就会消失。

对于 pylint,禁用 E1101 可以解决问题, pragma # pylint: disable=E1101。Pylint pragma 只需要在相同的缩进级别,但 pydev 注释必须在同一行。我有点评论混乱的功能变成了:

def get_test_datafile(file_):
    # pylint: disable=E1101
    return pkg_resources.resource_string(__name__, #@UndefinedVariable
                                         'testdata/'+file_)
于 2011-08-02T14:43:34.457 回答