python code-analysis pydev

python - ¿Cómo soluciono los errores "Variable indefinida de la importación de PyDev"?



code-analysis (12)

Tengo un proyecto de Python usando PyDev en Eclipse, y PyDev sigue generando errores falsos para mi código. Tengo una settings módulo que define un objeto de settings . Lo importo en el módulo b y le asigno un atributo con:

from settings import settings settings.main = object()

En algunos de mis códigos, pero no en todos, declaraciones como:

from settings import settings print settings.main

... generar mensajes de "Variable indefinida de importación: principal" en el panel de error de código de Eclipse, aunque el código se ejecuta sin problemas. ¿Cómo puedo corregir esto?


Encuentro que estos 2 pasos funcionan para mí todo el tiempo:

  1. Confirme (si no agrega) la carpeta principal del módulo a PYTHONPATH.
  2. Agregue el nombre COMPLETO del módulo a los builtins forzados.

Las cosas a tener en cuenta aquí:

  • Algunos módulos populares se instalan con algunos pares padre e hijo con el mismo nombre. En estos casos, también debe agregar ese padre a PYTHONPATH, además de su carpeta de abuelos, que ya confirmó / agregó para todo lo demás.

  • Utilice (por ejemplo) "google.appengine.api.memcache" al agregar a builtins forzados, NO "Memcache" solamente, donde "google" en este ejemplo, es un elemento secundario inmediato de una carpeta definida en PYTHONPATH.


Es posible que solo necesite volver a configurar su ruta de Python dentro de Eclipse. Vea mi answer a una pregunta similar.


Estaba teniendo un problema similar con un proyecto de Eclipse / PyDev. En este proyecto, el directorio raíz del código python era un subdirectorio del proyecto.

--> MyProject + --> src Root of python code + --> module1 A module + --> module2 Another module + --> docs + --> test

Cuando se depuró o ejecutó el proyecto, todo estuvo bien ya que el directorio de trabajo estaba configurado en el lugar correcto. Sin embargo, el análisis del código PyDev no encontró ninguna importación desde el módulo1 o el módulo2.

La solución fue editar las propiedades del proyecto -> sección PyDev - PYTHONPATH y eliminar / MyProject de la pestaña de carpetas de origen y agregar / MyProject / src a ella.


Esto funcionó para mí:

paso 1) Eliminar el intérprete, configurarlo de nuevo automáticamente

paso 2) Ventana - Preferencias - PyDev - Intérpretes - Intérprete de Python Ir a la pestaña Buckets forzados Haga clic en Nuevo ... Escriba el nombre del módulo (maldiciones en mi caso) y haga clic en Aceptar

paso 3) Haga clic derecho en el explorador de proyectos en cualquier módulo que esté dando errores. Ir a PyDev-> Análisis de código.


Estoy usando opencv, que se basa en binarios, etc., así que tengo scripts donde cada otra línea tiene este error tonto. Python es un lenguaje dinámico, por lo que tales ocasiones no deben considerarse errores.

Eliminé estos errores por completo yendo a:

Ventana -> Preferencias -> PyDev -> Editor -> Análisis de código -> Indefinido -> Variable indefinida desde importación -> Ignorar

Y eso es eso.

También puede ser Ventana -> Preferencias -> PyDev -> Editor -> Análisis de código -> Importaciones -> Importar no encontrado -> Ignorar


Haga clic derecho en el explorador del proyecto en cualquier módulo que esté dando errores. Vaya a PyDev-> Eliminar marcadores de error.


La publicación marcada como respuesta proporciona una solución, no una solución.

Esta solución funciona para mí:

  • Ir a la Window - Preferences - PyDev - Interpreters - Python Interpreter
  • Ve a la pestaña Forced builtins
  • Haga clic en New...
  • Escriba el nombre del módulo ( multiprocessing en mi caso) y haga OK en OK

No solo desaparecerán los mensajes de error, sino que también se reconocerán los miembros del módulo.


Para el código de su proyecto, la única forma es agregar una declaración que diga que usted esperaba eso, posiblemente protegido por un if False para que no se ejecute (el análisis de código estático solo ve lo que ve, no la información de tiempo de ejecución) si usted mismo abrió ese módulo, no tendría ninguna indicación de que se esperaba principal).

Para superar esto, hay algunas opciones:

  1. Si se trata de un módulo externo, es posible agregarlo a los forced builtins para que forced builtins un shell para que obtenga información de tiempo de ejecución (ver http://pydev.org/manual_101_interpreter.html para más detalles) - es decir: en su mayoría, PyDev importará el módulo en un shell y hará un dir(module) y dir en las clases que se encuentran en el módulo para presentar terminaciones y hacer análisis de código.

  2. Puede usar Ctrl + 1 (Cmd + 1 para Mac) en una línea con un error y PyDev le presentará una opción para agregar un comentario para ignorar ese error.

  3. Es posible crear un módulo de stub y agregarlo a las terminaciones predefined ( http://pydev.org/manual_101_interpreter.html también tiene detalles sobre eso).


Una aproximación de lo que estaba haciendo:

import module.submodule class MyClass: constant = submodule.constant

A lo que pylint dijo: E: 4,15: Undefined variable ''submodule'' (undefined-variable)

Resolví esto cambiando mi importación como:

from module.submodule import CONSTANT class MyClass: constant = CONSTANT

Nota: También cambié el nombre por variable importada para que tenga un nombre en mayúscula para reflejar su naturaleza constante.


Yo tuve el mismo problema. Estoy usando Python y Eclipse en Windows. El código funcionaba bien, pero los errores de eclipse muestran en todas partes. Después de cambiar el nombre de la carpeta ''Lib'' por ''lib'' (C: / Python27 / lib), se solucionó el problema. Parece que si el uso de mayúsculas de las letras no coincide con el del archivo de configuración, esto a veces causará problemas (pero parece que no siempre, porque la comprobación de errores estuvo bien durante mucho tiempo antes de que los problemas aparecieran repentinamente sin obvio razón).


en preferencias -> PyDev -> PyLint bajo argumentos para pasar a PyLint agregue esta línea:

--generated-members=objects

deberás hacer esto para cada uno generado. Encontré esto buscando en Google, pero perdí la referencia.


Mi respuesta no aporta nada nuevo, solo un ejemplo concreto que encontré.

import gtk.gdk w = gtk.gdk.get_default_root_window()

PyDev mostró el mensaje de error "Variable no definida de import: get_default_root_window ()"

En el shell de Python puede ver que este es un módulo ''incorporado'' como se menciona en la respuesta anterior:

>>> import gtk.gdk >>> gtk.gdk <module ''gtk.gdk'' (built-in)>

Ahora, en Ventana-> Preferencias-> PyDev-> Intérpretes-> Intérprete de Python, seleccioné la pestaña ''Builtins forzados'' y agregué ''gtk.gdk'' a la lista.

Ahora el mensaje de error ya no se muestra.