Estoy ejecutando PyLint en un proyecto de Python. PyLint presenta muchas quejas por no poder encontrar miembros 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])
Lo cual, cuando corro, obtengo lo esperado:
[[0. 0. 0. 0.]]
Sin embargo, pylint me da este error:
E: 3, 6: El módulo 'numpy' no tiene miembro 'ceros' (no miembro)
Para las versiones, estoy usando pylint 1.0.0 (astroid 1.0.1, común 0.60.0) e intento trabajar con numpy 1.8.0.
Yo tenía 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 mipylintrc
archivo, en la[TYPECHECK]
sección:Dependiendo del error, es posible que también deba agregar la siguiente línea (aún en el
[TYPECHECK] section
):fuente
extension-pkg-whitelist=numpy
línea debajo del[MASTER]
encabezado del archivo .pylintrc. pylint parece ser un software bastante frágil y requiere el toque de un experto para que funcione en tareas básicas.--extension-pkg-whitelist
, que realmente lleva a cabo la importación para el módulo especificado.Recibía el mismo error para un pequeño proyecto numpy en el que estaba trabajando y decidí que ignorar los módulos 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:
y
y "solucionó" mi problema.
fuente
ignored-*
entradas? Para mí, simplemente agregar un módulo a la lista blanca de extensiones funciona perfectamente.En versiones recientes de pylint puede agregar
--extension-pkg-whitelist=numpy
a su comando pylint. Habían solucionado este problema en una versión anterior de forma insegura. Ahora, si desea que observen más detenidamente un paquete fuera de la biblioteca estándar, debe incluirlo explícitamente en la lista blanca. Mira aquí.fuente
Dado que este es el mejor resultado en 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
por lo que el último paso probablemente requerirá un
sudo
y, por supuesto, necesita mercurial para clonar.fuente
from numpy import ceil
resultados de este códigoE: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module)
, compruebo la confirmación mencionada anteriormente y parece que esos cambios están en la versión de astroid que tengo.Module 'numpy' has no 'zeros' member (no-member)
Para ignorar todos los errores generados por los atributos de numpy.core, ahora podemos usar:
Como otra solución, agregue esta opción al archivo ~ / .pylintrc o / etc / pylintrc :
Por lo mencionado en el código de la pregunta por ahora esto parece redundante, pero todavía es importante para otros módulos, es decir. Netifaces y etc.
fuente
patsy.dmatrices
. Agregargenerated-members=patsy.dmatrices
resolvió mi problema.Si no desea agregar más configuraciones, agregue este código a su archivo de configuración, en lugar de 'lista blanca'.
fuente
pylint: error: no such option: --generate-members
Se han informado muchos errores diferentes sobre esto en los últimos años, es decir, https://bitbucket.org/logilab/pylint/issue/58/false-positive-no-member-on-numpy-imports
Sugeriría deshabilitar las líneas donde ocurren las quejas.
fuente
Probablemente, se confunde con el método abstruso de importación de métodos de numpy. Es decir,
zeros
de hechonumpy.core.multiarray.zeros
, se importa en numpy con declaracióna su vez importado con
y en numérico encontrarás
¡Supongo que estaría confundido en lugar de PyLint!
Vea este error para el lado de vista de PyLint.
fuente
Tuve que agregar esto en la parte superior de cualquier archivo donde uso mucho numpy.
En caso de que alguien en eclipse tenga problemas con Pydev y pylint ...
fuente
En la extensión a la respuesta j_hougs, ahora puede agregar los módulos en cuestión a esta línea en .pylintrc, que ya está preparado vacío en la generación:
puede generar una muestra .pylintrc haciendo:
y luego edite la línea mencionada
fuente
Esto finalmente se resolvió en Pylint 1.8.2. Funciona de fábrica, ¡no se necesitan ajustes de pylintrc!
fuente
Esta es la pseudo solución que se me ocurrió para este problema.
Luego, en su código, en lugar de llamar a
numpy
funciones comonp.array
ynp.zeros
y así sucesivamente, que iba a escribirnp_array
,np_zeros
etc. Las ventajas de este método frente a otros enfoques sugeridos en otras respuestas:La clara desventaja es que debe importar explícitamente cada función numpy que use. El enfoque podría desarrollarse más. Puedes definir tu propio módulo, llámalo decir, de la
numpy_importer
siguiente maneraLuego, su código de aplicación podría importar este módulo solamente (en lugar de numpy) como
y usa los nombres como siempre:
np.zeros
,np.array
etc.La ventaja de esto es que tendrá un único módulo en el que todas
numpy
las importaciones relacionadas se realizan de una vez por todas, y luego lo importa con esa única línea, donde lo desee. Sin embargo, debe tener cuidado denumpy_importer
no importar nombres que no existen,numpy
ya que esos errores no serán detectados por pylint.fuente
Tuve este problema con numpy, scipy, sklearn, nipy, etc., y lo resolví envolviendo epylint de esta manera:
$ cat epylint.py
Este script simplemente ejecuta epylint, luego raspa su salida para filtrar advertencias y errores falsos positivos. Puede extenderlo agregando más casos elif.
NB: si esto se aplica a usted, entonces querrá modificar sus pychechers.sh para que le guste así
(Por supuesto, primero debe hacer que epylint.py sea ejecutable)
Aquí hay un enlace a mis .emacs https://github.com/dohmatob/mydotemacs . Espero que sea útil para alguien.
fuente
Esto parece funcionar al menos en Pylint 1.1.0:
fuente
Esta solución me funcionó
Básicamente, vaya a Seleccionar el icono de engranaje de la parte inferior izquierda => Configuración => Configuración del espacio de trabajo => Extensión => Configuración de Python => Haga clic en cualquier Configuración.json => agregue esto en el archivo "python.linting.pylintArgs": [" --extension-pkg-whitelist = numpy "] Estoy usando VS 1.27.2
fuente
Tuve el mismo problema con un módulo diferente (
kivy.properties
) que es un módulo C envuelto comonumpy
.Usando VSCode V1.38.0, la solución aceptada detuvo todo el proceso para el proyecto. Entonces, si bien eliminó el falso positivo
no-name-in-module
, en realidad no mejoró la situación.La mejor solución para mí fue usar el
--ignored-modules
argumento en el módulo ofensivo. El problema es que pasar cualquier argumento a través depython.linting.pylintArgs
borra la configuración predeterminada de VSCode , por lo que también debe restablecerlos. Eso me dejó con el siguiente archivo settings.json:fuente
Un poco de copiar y pegar de la respuesta anterior para resumir lo que está funcionando (al menos para mí: debian-jessie)
En alguna versión anterior
pylint
había un problema que impedía que funcionara con numpy (y otros paquetes similares).Ahora ese problema se ha resuelto, pero los paquetes C externos (interfaces de Python para código C, como numpy) están deshabilitados de forma predeterminada por razones de seguridad.
Puede crear una lista blanca para permitir
pylint
su uso en el archivo~/.pylintrc
.Comando básico para ejecutar: # SOLO si aún no tiene un archivo .pylintrc en su hogar $ pylint --generate-rcfile> .pylintrc
Luego abra el archivo y agregue los paquetes que desee después de
extension-pkg-whitelist=
separarlos con una coma. Puede tener el mismo comportamiento utilizando la opción--extension-pkg-whitelist=numpy
de la línea de comando.Si ignora algunos paquetes en la
[TYPECHECK]
sección, eso significa quepylint
nunca mostrará errores relacionados con esos paquetes. En la práctica,pylint
no le diré nada sobre esos paquetes.fuente
He estado trabajando en un parche para pylint para resolver el problema con miembros dinámicos en bibliotecas como numpy. Agrega una opción de "módulos dinámicos" que obliga a verificar si existen miembros durante el tiempo de ejecución haciendo una importación real del módulo. Consulte el número 413 en logilab / pylint . También hay una solicitud de extracción, vea el enlace en uno de los comentarios.
fuente
Una respuesta rápida: actualice Pylint a 1.7.1 (use conda-forge proporcionado Pylint 1.7.1 si usa conda para administrar paquetes)
Encontré un problema similar en pylint GitHub aquí y alguien respondió que todo estaba bien después de actualizar a 1.7.1.
fuente
No estoy seguro de si esta es una solución, pero en VSCode una vez que escribí explícitamente en mi configuración de usuario para habilitar pylint, todos los módulos fueron reconocidos.
fuente
Últimamente (desde que algo cambió en spyder o pylint o?), He estado recibiendo errores E1101 ("sin miembro") del análisis de código estático de spyder en símbolos de astropía. No tengo idea de por qué.
Mi solución simplista para todos los usuarios en un sistema Linux o Unix (Mac es probablemente similar) es crear un / etc / pylintrc de la siguiente manera:
Por supuesto, esto podría, en cambio, colocarse en un archivo personal $ HOME / .pylintrc. Y, podría haber actualizado un archivo existente.
fuente