Как исправить ошибки PyDev "неопределенная переменная из импорта"?


у меня есть проект Python, использующий PyDev в Eclipse, и PyDev продолжает генерировать ложные ошибки для моего кода. У меня есть модуль settings что определяет a

12 127

12 ответов:

для кода в вашем проекте единственным способом является добавление объявления о том, что вы ожидали этого-возможно, защищенного if False чтобы он не выполнялся (статический анализ кода видит только то, что вы видите, а не информацию о времени выполнения-если бы вы сами открыли этот модуль, у вас не было бы никаких признаков того, что ожидалось main).

чтобы преодолеть это есть несколько вариантов:

  1. если это какой-то внешний модуль, можно добавить его в forced builtins Так что PyDev создает оболочку для получения информации о времени выполнения (см. http://pydev.org/manual_101_interpreter.html для деталей) -- т. е.: в основном, PyDev импортирует модуль в оболочку и делает dir(module) и dir на классы, найденные в модуле, чтобы представить завершения и сделать анализ кода.

  2. вы можете использовать Ctrl+1 (Cmd+1 для Mac) в строке с ошибкой, и PyDev предоставит вам возможность добавить комментарий, чтобы игнорировать это ошибка.

  3. можно создать stub модуль и добавить его к predefined завершения (http://pydev.org/manual_101_interpreter.html также есть подробности об этом).

Я использую opencv, который опирается на двоичные файлы и т. д. Поэтому у меня есть скрипты, где каждая другая строка имеет эту глупую ошибку. Python является динамическим языком, поэтому такие случаи не должны рассматриваться как ошибки.

Я удалил эти ошибки в целом, перейдя к:

Окно - > Настройки - > PyDev - > Редактор - > Анализ Кода -> Неопределенная - > Неопределенная Переменная Из Импорта - > Игнорировать

и это все.

Это также может быть, Окно - > Настройки - > PyDev - > Редактор - > анализ кода - > импорт - > импорт не найден - > игнорировать

сообщение, отмеченное как ответ, дает обходной путь, а не решение.

это решение работает для меня:

  • на Window - Preferences - PyDev - Interpreters - Python Interpreter
  • перейти к Forced builtins tab
  • нажать на кнопку New...
  • введите имя модуля (multiprocessing в моем случае) и нажмите кнопку OK

не только исчезнут сообщения об ошибках, но и будут распознаны члены модуля.

У меня была аналогичная проблема с проектом Eclipse/PyDev. В этом проекте корневой каталог кода python был подкаталогом проекта.

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

когда проект был отлажен или запущен, все было в порядке, так как рабочий каталог был установлен в правильное место. Однако анализ кода PyDev не смог найти импорт из module1 или module2.

решение состояло в том, чтобы отредактировать свойства проекта - > PyDev-PYTHONPATH раздел и удалить /MyProject с вкладки исходные папки и вместо этого добавьте /MyProject / src.

Это сработало для меня:

Шаг 1) Удаление интерпретатора, автоматическая настройка его снова

Шаг 2) окно-настройки-PyDev-интерпретаторы-интерпретатор Python Перейдите на вкладку принудительная сборка Нажмите на кнопку Создать... Введите имя модуля (проклятия в моем случае) и нажмите кнопку ОК

Шаг 3) щелкните правой кнопкой мыши в проводнике проекта на какой модуль дает ошибки. Перейдите в PyDev - >анализ кода.

У меня была та же проблема. Я использую Python и Eclipse на Windows. Код работал просто отлично, но eclipse показывает ошибки везде. После того, как я изменил имя папки " Lib " на " lib " (C:\Python27\lib), проблема была решена. Кажется, что если заглавные буквы не совпадают с буквами в файле конфигурации, это иногда вызывает проблемы (но это кажется не всегда, потому что проверка ошибок была прекрасной в течение длительного времени, прежде чем проблемы внезапно появились для нет очевидной причины).

приближение того, что я делал:

import module.submodule

class MyClass:
    constant = submodule.constant

которому сказал pylint : E: 4,15: Undefined variable 'submodule' (undefined-variable)

я решил это, изменив мой импорт, как:

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

Примечание: я также переименован импортированной переменной, чтобы иметь имя в верхнем регистре, чтобы отразить его постоянный характер.

возможно, вам просто нужно заново настроить свой путь python в Eclipse. Смотрите мой ответ на подобный вопрос.

в настройках --> PyDev --> PyLint под аргументы для передачи в PyLint добавьте следующую строку:

--generated-members=objects

вам нужно будет сделать это для каждого сгенерированного . Я нашел это в гугле, но я потерял ссылку.

щелкните правой кнопкой мыши в обозревателе проектов в зависимости от того, какой модуль выдает ошибки. Перейдите в PyDev - >удалить маркеры ошибок.

мой ответ не вносит ничего нового, просто конкретный пример, я столкнулся.

import gtk.gdk

w = gtk.gdk.get_default_root_window()

PyDev показал сообщение об ошибке " неопределенная переменная из импорта: get_default_root_window ()"

в оболочке python вы можете видеть, что это "встроенный" модуль, как указано в ответе выше:

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

теперь под Window - > Preferences->PyDev->Interpreters - >Python Interpreter, я выбрал вкладку 'Forced Builtins' и добавил 'gtk.ГДК в список.

теперь сообщение об ошибке не показывают.

Я считаю, что эти 2 шага работают для меня все время:

  1. подтвердите (иначе добавьте) родительскую папку модуля в PYTHONPATH.
  2. добавьте полное имя модуля к принудительным встроенным файлам.

то, что нужно отметить здесь:

  • некоторые популярные модули устанавливаются с некоторой родительской и дочерней парой, имеющей то же имя. В этих случаях вам также нужно добавить этого родителя в PYTHONPATH, в дополнение к его папке grandparent, которая вы уже подтвердили / добавили для всего остального.

  • используйте (например) "google.appengine.прикладной программный интерфейс.memcache "при добавлении в принудительные встроенные файлы, а не только" memcache", где" google " в этом примере является непосредственным дочерним элементом папки, определенной в PYTHONPATH.