¿Cómo soluciono los errores de PyDev “Variable no definida de importación”?

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

 from settings import settings settings.main = object() 

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

 from settings import settings print settings.main 

… genere mensajes de “Variable no definida desde importación: principal” en el panel de error de código de Eclipse, aunque el código se ejecute sin problemas. ¿Cómo puedo corregir estos?

Para el código en su proyecto, la única forma es agregar una statement que indique que 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 abriera ese módulo, no tendría ninguna indicación de que se esperaba el principal).

Para superar esto hay algunas opciones:

  1. Si se trata de algún módulo externo, es posible agregarlo a las forced builtins para que forced builtins un shell para que obtenga información de tiempo de ejecución (consulte http://pydev.org/manual_101_interpreter.html para obtener más información), es decir, principalmente PyDev importará el módulo en un shell y hará un dir(module) y dir en las clases encontradas en el módulo para presentar completaciones 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á la opción de 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).

Estoy usando opencv, que se basa en binarios, etc., así que tengo scripts donde todas las demás líneas tienen este error tonto. Python es un lenguaje dynamic, por lo que tales ocasiones no deberían considerarse errores.

Eliminé estos errores por completo yendo a:

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

Y eso es eso.

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

El mensaje marcado como respuesta da una solución, no una solución.

Esta solución funciona para mí:

  • Ir a la Window - Preferences - PyDev - Interpreters - Python Interpreter
  • Ir 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.

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

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

Cuando el proyecto se depuró o se ejecutó, todo funcionó bien ya que el directorio de trabajo se configuró en el lugar correcto. Sin embargo, el análisis del código PyDev no pudo encontrar ninguna importación desde el módulo 1 o el módulo 2.

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

Esto funcionó para mí:

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

paso 2) Ventana – Preferencias – PyDev – Intérpretes – Intérprete de Python Vaya a la pestaña Elementos forzados Haga clic en Nuevo … Escriba el nombre del módulo (curses en mi caso) y haga clic en Aceptar

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

Yo tuve el mismo problema. Estoy usando Python y Eclipse en Windows. El código funcionaba bien, pero el eclipse muestra errores en todas partes. Después de cambiar el nombre de la carpeta ‘Lib’ a ‘lib’ (C: \ Python27 \ lib), el problema se resolvió. Parece que si la mayúscula de las letras no coincide con la 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 ser obvios) razón).

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 tener un nombre en mayúscula que refleje su naturaleza constante.

Es posible que solo necesite volver a configurar la ruta de Python dentro de Eclipse. Ver mi respuesta a una pregunta similar.

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

 --generated-members=objects 

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

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

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 la importación: get_default_root_window ()”

En el shell de python, puedes ver que este es un módulo ‘incorporado’ como se mencionó en la respuesta anterior:

 >>> import gtk.gdk >>> gtk.gdk  

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

Ahora el mensaje de error ya no se mostraba.

Encuentro que estos 2 pasos me funcionan todo el tiempo:

  1. Confirme (o agregue) la carpeta principal del módulo a PYTHONPATH.
  2. Agregue el nombre COMPLETO del módulo a los elementos forzados.

Las cosas a tener en cuenta aquí:

  • Algunos módulos populares se instalan con algunos pares padre e hijo que tienen 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” cuando agregue elementos forzados, NO “memcache” solamente, donde “google” en este ejemplo, es un elemento secundario inmediato de una carpeta definida en PYTHONPATH.