vscode visual studio programar ejecutar desde correr configurar como code python pylint python-extensions

python - visual - pylint 1.4 informa E1101(no miembro) en todas las extensiones C



ejecutar python en vscode (3)

@ user590028, muchas gracias por tu respuesta! Me encontré con este problema con las bibliotecas win32api, win32evtlog, win32file, win32gui y win32process, y tu solución funcionó.

Utilicé otro método que creo que vale la pena publicar aquí, que es llamar a pylint y pasar los paquetes incluidos en la lista blanca como un parámetro:

pylint --extension-pkg-whitelist=win32api,win32evtlog,win32file,win32gui,win32process myfile.py

Hemos sido fanáticos desde hace mucho tiempo de pylint . Su análisis estático se ha convertido en una parte fundamental de todos nuestros proyectos python y ha ahorrado mucho tiempo persiguiendo bugs oscuros. Pero después de actualizar desde 1.3 -> 1.4, casi todas las extensiones compiladas c producen errores E1101 (sin miembro).

Los proyectos que anteriormente funcionaban perfectamente limpios a través de pylint 1.3 ahora se quejan de casi todos los miembros de la extensión C con E1101. Nos hemos visto obligados a desactivar los errores E1101, pero esto resta valor a la utilidad de la pylint .

Por ejemplo, este uso perfectamente válido del paquete lxml

r"""valid.py: demonstrate pylint 1.4 error""" from lxml import etree print etree.Element(''mydoc'')

Ejecuta esto a través de una pylint e informa:

$ pylint -rn valid.py No config file found, using default configuration ************* Module valid E: 3, 6: Module ''lxml.etree'' has no ''Element'' member (no-member)

Pero es perfectamente válido:

$ python valid.py <Element mydoc at 7fddf67b1ba8>

Aquí es donde se vuelve realmente extraño. Un puñado muy pequeño de extensiones C parece funcionar bien a través de la pylint , por ejemplo:

r"""valid2.py: this one works fine""" import sqlite3 print sqlite3.version $ pylint -rn valid2.py No config file found, using default configuration

Mi pregunta es, ¿alguien más ha sido testigo de esto? Y si es así, ¿estaría dispuesto a compartir su solución / solución?

Experimentamos con intentar crear complementos para suprimir estas advertencias ( http://docs.pylint.org/plugins.html#enter-plugin ), pero estamos teniendo dificultades para obtener información sobre los documentos, y el astroid clase base astroid es súper compleja y ha desafiado nuestros intentos de asimilarla.

Para puntos de bonificación reales (y nuestra eterna gratitud) nos encantaría entender qué cambió en la pylint . Con gusto arreglaremos el código (o al menos publicaremos un documento de mejores prácticas para los autores de la extensión C) que satisfaría a pylint .

Detalles de la plataforma

$ pylint --version No config file found, using default configuration pylint 1.4.0, astroid 1.3.2, common 0.63.2 Python 2.7.5 (default, Jul 1 2013, 18:09:11) [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]


Para aquellos de ustedes que usan VS Code, es un poco complicado encontrar dónde colocar el comando ya que no pude encontrar mi ejecutable.

En el código VS

  1. haga clic en Archivo> Preferencias> Configuración.
  2. Desplácese hacia abajo a "Configuraciones de Python" en la ventana izquierda
  3. desplácese hacia abajo a "Python Linting: Mypy Args" en la ventana derecha
  4. haga clic en el enlace "Editar en settings.json"
  5. edite el json para incluir: "--extension-pkg-whitelist ="

Tenía que hacer todo esto porque PyLint no es ejecutable desde mi línea de comandos de Windows ...


Poco después de publicar mi pregunta, encontré la respuesta. El cambio fue de hecho hecho a propósito como una medida de seguridad. Pylint importa módulos para identificar de manera efectiva los métodos y atributos válidos. Se decidió que la importación de extensiones c que no son parte de python stdlib es un riesgo de seguridad y podría introducir código malicioso.

Esto se hizo en el lanzamiento de Astroid 1.3.1 https://mail.python.org/pipermail/code-quality/2014-November/000394.html

Solo las extensiones C de fuentes confiables (la biblioteca estándar) se cargan en el proceso de análisis de Python para crear una AST a partir del módulo activo.

Hay cuatro soluciones si desea usar pylint en proyectos que importan extensiones no stdlib c.

1) Deshabilite la seguridad usando la opción de línea de comando --unsafe-load-any-extension=y . Esta función no está documentada y se clasifica como una opción oculta ( https://mail.python.org/pipermail/code-quality/2014-November/000439.html ).

2) Desactive la seguridad usando la configuración pylint.rc unsafe-load-any-extensions=yes . Esto se recomienda sobre la opción 1 e incluye documentación completa en el archivo predeterminado pylint.rc (creado con --generate-rcfile ).

3) Especifique los paquetes o los nombres de los módulos en los que confía que se cargarán mediante la inserción de una pila en el archivo pylint.rc utilizando la opción extension-pkg-whitelist= .

4) Crear un complemento para manipular el AST (no tengo ni idea de cómo hacer esto, pero se discute con regularidad en la lista de correo de la lista).

Optamos por la Opción 3. pylint.rc la siguiente línea a nuestro archivo pylint.rc proyecto:

extension-pkg-whitelist=lxml