如何让PyLint识别numpy成员?

Alp*_*a14 156 python numpy pylint

我正在Python项目上运行PyLint.PyLint对无法找到numpy成员提出了许多抱怨.如何在避免跳过成员资格检查的同时避免这种情况.

从代码:

import numpy as np

print np.zeros([1, 4])
Run Code Online (Sandbox Code Playgroud)

哪,跑了,我得到了预期的:

[[0. 0. 0. 0.]]

但是,pylint给了我这个错误:

E:3,6:模块'numpy'没有'零'成员(无成员)

对于版本,我使用pylint 1.0.0(astroid 1.0.1,常见的0.60.0)并尝试使用numpy 1.8.0.

Dav*_*rke 73

如果将Visual Studio代码与Don Jayamanne的优秀Python扩展一起使用,请将用户设置添加到白名单numpy:

{
    // whitelist numpy to remove lint errors
    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=numpy"
    ]
}
Run Code Online (Sandbox Code Playgroud)

  • 我需要更多:"python.linting.pylintArgs":[" - signature-modules = numpy"," - ignore-classes = numpy"," - expand-pkg-whitelist = numpy"] (8认同)
  • 对于pylint 2.3.0,这不再对我有用。 (4认同)
  • @BSP彼得的帖子没有解决问题,它忽略了它.如果我可以对此评论进行投票,我会... (3认同)
  • 在新设置中,找到“Python › Linting: Pylint Args”,然后添加行“--extension-pkg-whitelist=numpy” (3认同)
  • 这有帮助!在VSCode 1.12.2上确认它适用于WI 10 x64. (2认同)
  • @Peter的解决方案在Windows 7 x64和Visual Studio Code 1.15.1中运行!! (2认同)

小智 58

我这里有同样的问题,即使有(所有相关的软件包的最新版本astroid 1.3.2,logilab_common 0.63.2,pylon 1.4.0).

以下解决方案就像一个魅力:我numpy通过修改我的pylintrc文件添加到被忽略的模块列表中,在以下[TYPECHECK]部分中:

[TYPECHECK]

ignored-modules = numpy
Run Code Online (Sandbox Code Playgroud)

根据错误,您可能还需要添加以下行(仍在[TYPECHECK] section)中:

ignored-classes = numpy
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个好的解决方案.它所做的就是完全禁用pylint检查是否存在任何成员.理想情况下,您希望它能够正确识别它们,这是其他解决方案所做的. (12认同)
  • 在Linux上使用pylint 1.4.4,astroid 1.3.8和Python 3.4.3,这很有用,但是我必须将`extension-pkg-whitelist = numpy`行放在.pylintrc文件的`[MASTER]`标题下. .pylint似乎是一个相当脆弱的软件,需要专家的帮助才能使它适用于基本任务. (2认同)

小智 40

对于我正在研究的小型numpy项目,我得到了同样的错误,并决定忽略numpy模块就可以了.我创建了一个.pylintrc文件:

$ pylint --generate-rcfile > ~/.pylintrc

并按照paduwan和j_houg的建议修改了以下部分:

[MASTER]

# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code
extension-pkg-whitelist=numpy
Run Code Online (Sandbox Code Playgroud)

[TYPECHECK]

# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis. It
# supports qualified module names, as well as Unix pattern matching.
ignored-modules=numpy

# List of classes names for which member attributes should not be checked
# (useful for classes with attributes dynamically set). This supports can work
# with qualified names.
ignored-classes=numpy
Run Code Online (Sandbox Code Playgroud)

它"修复"了我的问题.

  • 您确定也必须将其添加到两个“ ignored- *”入口中吗?对我来说,只需将模块添加到扩展白名单即可。 (4认同)

小智 39

在最近的pylint版本中,您可以添加--extension-pkg-whitelist=numpy到pylint命令.他们以不安全的方式在早期版本中解决了这个问题.现在,如果您希望它们更仔细地查看标准库之外的包,则必须将其明确列入白名单.看这里.

  • "看到这里"链接已经死了.虽然解决方案仍然有效,但理解起来很难(呃),为什么.从链接的问题中添加一段摘录会很不错. (2认同)

bij*_*ncn 17

由于这是谷歌的最佳结果,它给我的印象是你必须忽略所有文件中的警告:

上个月https://bitbucket.org/logilab/astroid/commits/83d78af4866be5818f193360c78185e1008fd29e已经解决了pylint/astroid来源中的问题, 但还没有在Ubuntu软件包中.

只是为了得到消息来源

hg clone https://bitbucket.org/logilab/pylint/
hg clone https://bitbucket.org/logilab/astroid
mkdir logilab && touch logilab/__init__.py
hg clone http://hg.logilab.org/logilab/common logilab/common
cd pylint && python setup.py install
Run Code Online (Sandbox Code Playgroud)

最后一步很可能需要一个sudo,当然你需要mercurial来克隆.

  • 你们使用哪个版本?我在astroid 1.3.2和pylint 1.4.0上我仍然遇到这个代码的问题`来自numpy import ceil`导致`E:1,0:模块'numpy'中没有名字'ceil'(没有 - name-in-module)`我检查了上面引用的提交,看来这些更改都是我的astroid版本. (7认同)
  • 显然这仍然没有在pylint 1.4.2中修复,astroid 1.3.4:`Module'numpy'没有'零'成员(没有成员)` (4认同)
  • 也许这是一个回归 - 似乎确实有一个旨在解决问题的版本.不管怎样,我已经在https://bitbucket.org/logilab/pylint/issue/453/spurious-module-numpy-has-no-ones-member上开了一个关于它的新问题. (3认同)
  • 完全按照Xubuntu 14.04的建议,这导致了一个不工作的pylint:py2.7.egg/pylint/lint.py",第866行,在check_astroid_module中astroid.close()AttributeError:'Module'对象没有属性'关' (2认同)

Spa*_*atz 11

为了忽略numpy.core属性生成的所有错误,我们现在可以使用:

$ pylint a.py --generated-members=numpy.*
Run Code Online (Sandbox Code Playgroud)

作为另一种解决方案,将此选项添加到〜/ .pylintrc/ etc/pylintrc文件中:

[TYPECHECK]

# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=numpy.*
Run Code Online (Sandbox Code Playgroud)

对于现在提到的问题代码,这似乎是简化的,但仍然对另一个模块很重要,即.netifaces


lai*_*jay 11

如果您不想添加更多配置,请将此代码添加到您的配置文件中,而不是“白名单”。

{
    "python.linting.pylintArgs": ["--generate-members"],
}
Run Code Online (Sandbox Code Playgroud)

  • 您应该提到这非常适用于 VS Code。 (10认同)

fly*_*low 7

在过去的几年里,有很多不同的错误报道,例如https://bitbucket.org/logilab/pylint/issue/58/false-positive-no-member-on-numpy-imports

我建议禁用发生投诉的线路.

# pylint: disable=E1103
print np.zeros([1, 4])
# pylint: enable=E1103
Run Code Online (Sandbox Code Playgroud)

  • 我使用numpy这么多,我不妨在整个文件中禁用无成员检查,但是,我想避免这样做. (9认同)
  • -1只是因为@ bijancn的答案现在应该取代这个. (2认同)

alk*_*lko 6

可能,它与numpy的方法导入的深奥方法相混淆.即,zeros实际上numpy.core.multiarray.zeros是在numpy中导入语句

from .core import *
Run Code Online (Sandbox Code Playgroud)

反过来导入

from .numeric import *
Run Code Online (Sandbox Code Playgroud)

你会发现数字

zeros = multiarray.zeros
Run Code Online (Sandbox Code Playgroud)

我想我会被困在PyLint的位置!

请参阅此错误以了解PyLint的一面.

  • 该SO链接使PyLint无视导入某些模块.我不太确定它会抑制那些文件的无成员错误.如果可能的话,我也想避免修补我的PyLint. (2认同)

Tom*_*nio 5

这终于在 Pylint 1.8.2 中得到解决。它开箱即用,不需要 pylintrc调整!


Mik*_*ett 5

我在一个不同的模块 ( kivy.properties) 上遇到了同样的问题,它是一个像 NumPy 这样的封装 C 模块。

使用 Visual Studio Code V1.38.0,已接受的解决方案停止了项目的所有 linting。因此,虽然它确实消除了误报no-name-in-module,但并没有真正改善情况。

对我来说最好的解决方法是--ignored-modules在有问题的模块上使用参数。问题是,通过传递任何参数会python.linting.pylintArgs清除默认的 Visual Studio Code 设置,因此您还需要重置这些设置。这给我留下了以下settings.json文件:

{
    "python.pythonPath": "C:\\Python\\Python37\\python.exe",
    "python.linting.pylintEnabled": true,
    "python.linting.enabled": true,
    "python.linting.pylintArgs": [
        "--ignored-modules=kivy.properties",
        "--disable=all",
        "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode"
    ]
}
Run Code Online (Sandbox Code Playgroud)