¿Cómo hago para que Pylint reconozca a los miembros de NumPy?

7 minutos de lectura

avatar de usuario
alfadelta14

Estoy ejecutando Pylint en un proyecto de Python. Pylint presenta muchas quejas por no poder encontrar miembros de NumPy. ¿Cómo puedo evitar esto mientras evito omitir los controles de membresía?

Del código:

import numpy as np

print np.zeros([1, 4])

Que, cuando se ejecutó, obtengo lo esperado:

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

Sin embargo, Pylint me da este error:

E: 3, 6: el módulo ‘numpy’ no tiene ningún miembro ‘ceros’ (sin miembro)

Para las versiones, estoy usando Pylint 1.0.0 (astroid 1.0.1, common 0.60.0) y trato de trabajar con NumPy 1.8.0.

avatar de usuario
david clarke

si usa código de estudio visual con la excelente de Don Jayamanne Extensión de Pythonagregue una configuración de usuario a la lista blanca de NumPy:

{
    // Whitelist NumPy to remove lint errors
    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=numpy"
    ]
}

  • ¡Esto ayudó! en VSCode 1.12.2 confirmó que funciona en Windows 10 x64.

    – Simara

    22 de mayo de 2017 a las 18:18

  • Necesitaba más: “python.linting.pylintArgs”: [ “–ignored-modules=numpy”, “–ignored-classes=numpy”, “–extension-pkg-whitelist=numpy” ]

    – Pedro

    14 de junio de 2017 a las 12:20

  • La publicación de @BSP Peter no resuelve el problema, lo ignora. Si pudiera rechazar este comentario lo haría…

    – Jonathan H.

    2 de marzo de 2018 a las 10:18

  • Esto ya no me funciona con pylint 2.3.0.

    – Guillochón

    28 de febrero de 2019 a las 21:02

  • En la nueva configuración, busque Python › Linting: Pylint Argsy luego agregue la línea --extension-pkg-whitelist=numpy

    – Jaime

    27 de mayo de 2020 a las 19:13


avatar de usuario
paduwan

Tuve el mismo problema aquí, incluso con las últimas versiones de todos los paquetes relacionados (astroid 1.3.2, logilab_common 0.63.2, pylon 1.4.0).

La siguiente solución funcionó a las mil maravillas: agregué numpy a la lista de módulos ignorados modificando mi pylintrc archivo, en el [TYPECHECK] sección:

[TYPECHECK]

ignored-modules = numpy

Según el error, es posible que también deba agregar la siguiente línea (todavía en el [TYPECHECK] section):

ignored-classes = numpy

  • En linux con pylint 1.4.4, astroid 1.3.8 y Python 3.4.3, esto funcionó, pero tuve que poner el extension-pkg-whitelist=numpy línea debajo de la [MASTER] encabezado del archivo .pylintrc. pylint parece ser un software bastante frágil y requiere el toque de un experto para que siga funcionando en tareas básicas.

    –Eric Leschinski

    24/03/2016 a las 17:51

  • Esta no es una buena solución. Todo lo que hace es deshabilitar completamente la verificación de pylint para la existencia de cualquier miembro. Idealmente, le gustaría que los reconozca correctamente, que es lo que hacen las otras soluciones.

    – iFreilicht

    24 de octubre de 2017 a las 9:21

  • @iFreilicht Es una medida de seguridad. En tiempo de ejecución, las definiciones de los módulos pueden cambiar dinámicamente; pero habilitar esto en pylint implicaría ejecutar código arbitrario. Sin embargo, todavía esperaría algún tipo de nota en la respuesta sobre --extension-pkg-whitelistque en realidad lleva a cabo la importación para el módulo especificado.

    –Zev Spitz

    20 de noviembre de 2017 a las 6:01

avatar de usuario
montar

Recibí el mismo error para un pequeño proyecto de NumPy en el que estaba trabajando y decidí que ignorar los módulos de NumPy funcionaría bien. creé un .pylintrc archivo con:

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

Y siguiendo los consejos de paduwan y j_houg modifiqué los siguientes sectores:

[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

y

[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

y “arregló” mi problema.

  • ¿Estás seguro de que tenías que añadirlo a los dos? ignored-* las entradas tambien? Para mí, solo agregar un módulo a la lista blanca de extensiones funciona perfectamente.

    – iFreilicht

    24 de octubre de 2017 a las 9:23

avatar de usuario
j_houg

En versiones recientes de Pylint puedes agregar --extension-pkg-whitelist=numpy a su comando Pylint.

Habían solucionado este problema en una versión anterior de forma poco segura. Ahora, si desea que analicen con más atención un paquete fuera de la biblioteca estándar, debe incluirlo explícitamente en la lista blanca. Mira aquí.

avatar de usuario
bijancn

Dado que este es el resultado principal en la Búsqueda de Google y me dio la impresión de que debe ignorar esas advertencias en todos los archivos:

El problema se solucionó en las fuentes de Pylint/astroid el mes pasado. https://bitbucket.org/logilab/astroid/commits/83d78af4866be5818f193360c78185e1008fd29e
pero aún no están en los paquetes de Ubuntu.

Para obtener las fuentes, solo

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

por lo que el último paso probablemente requerirá un sudo y por supuesto necesitas Mercurial para clonar.

  • Diría que no necesita clonar el nuevo logilab/common pero sí necesita instalar el nuevo logilab/astroid. Al reinstalar logilab/astroid y logilab/pylint, me resuelve el error.

    – más paugier

    31 de agosto de 2014 a las 22:35


  • ¿Qué versiones están usando ustedes? Estoy en astroid 1.3.2 y pylint 1.4.0 y todavía tengo el problema con este código from numpy import ceil da como resultado E: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module) Revisé el compromiso mencionado anteriormente y parece que esos cambios están en la versión de astroid que tengo.

    – Zach Dwiel

    27 de noviembre de 2014 a las 0:45


  • Hizo exactamente lo que se sugirió en Xubuntu 14.04 y resultó en un pylint que no funcionaba: py2.7.egg/pylint/lint.py”, línea 866, en check_astroid_module astroid.close() AttributeError: el objeto ‘Módulo’ no tiene atributo ‘ cerca’

    – bli

    11 de diciembre de 2014 a las 12:27

  • Tal vez esto sea una regresión: parece haber una versión destinada a solucionar el problema. Sea como sea, he abierto un nuevo número al respecto en bitbucket.org/logilab/pylint/issue/453/…

    – dstromberg

    21 de enero de 2015 a las 2:06


  • Aparentemente, esto todavía no está solucionado en pylint 1.4.2, astroid 1.3.4: Module 'numpy' has no 'zeros' member (no-member)

    – Factura

    02/08/2015 a las 20:54


Para ignorar todos los errores generados por los atributos de numpy.core, ahora podemos usar:

$ pylint a.py --generated-members=numpy.*

Como otra solución, agregue esta opción a ~/.pylintrc o /etc/pylintrc expediente:

[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.*

Este rasgo se introdujo en PyLint 1.6.0. Debe tenerse en cuenta que el fragmento de código de la pregunta original pasó el linting con esta versión incluso sin ninguna configuración adicional. Sin embargo, esto es útil en casos más complejos.

  • Diría que no necesita clonar el nuevo logilab/common pero sí necesita instalar el nuevo logilab/astroid. Al reinstalar logilab/astroid y logilab/pylint, me resuelve el error.

    – más paugier

    31 de agosto de 2014 a las 22:35


  • ¿Qué versiones están usando ustedes? Estoy en astroid 1.3.2 y pylint 1.4.0 y todavía tengo el problema con este código from numpy import ceil da como resultado E: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module) Revisé el compromiso mencionado anteriormente y parece que esos cambios están en la versión de astroid que tengo.

    – Zach Dwiel

    27 de noviembre de 2014 a las 0:45


  • Hizo exactamente lo que se sugirió en Xubuntu 14.04 y resultó en un pylint que no funcionaba: py2.7.egg/pylint/lint.py”, línea 866, en check_astroid_module astroid.close() AttributeError: el objeto ‘Módulo’ no tiene atributo ‘ cerca’

    – bli

    11 de diciembre de 2014 a las 12:27

  • Tal vez esto sea una regresión: parece haber una versión destinada a solucionar el problema. Sea como sea, he abierto un nuevo número al respecto en bitbucket.org/logilab/pylint/issue/453/…

    – dstromberg

    21 de enero de 2015 a las 2:06


  • Aparentemente, esto todavía no está solucionado en pylint 1.4.2, astroid 1.3.4: Module 'numpy' has no 'zeros' member (no-member)

    – Factura

    02/08/2015 a las 20:54


avatar de usuario
Pedro Mortensen

Si no desea agregar más configuraciones, agregue este código a su archivo de configuración, en lugar de ‘lista blanca’.

{
    "python.linting.pylintArgs": ["--generate-members"],
}

  • Debe mencionar que esto se aplica muy específicamente a VS Code.

    – bers

    4 de marzo de 2019 a las 9:58

  • Saldrá pylint: error: no such option: --generate-members

    – Nave espacial222

    29 de abril de 2020 a las 16:15

  • ¿Cuál es el nombre del archivo de configuración?

    -Peter Mortensen

    18 de enero de 2021 a las 6:09

¿Ha sido útil esta solución?