Как исправить ошибки PyDev "неопределенная переменная из импорта"?
у меня есть проект Python, использующий PyDev в Eclipse, и PyDev продолжает генерировать ложные ошибки для моего кода. У меня есть модуль settings
что определяет a
12 ответов:
для кода в вашем проекте единственным способом является добавление объявления о том, что вы ожидали этого-возможно, защищенного
if False
чтобы он не выполнялся (статический анализ кода видит только то, что вы видите, а не информацию о времени выполнения-если бы вы сами открыли этот модуль, у вас не было бы никаких признаков того, что ожидалось main).чтобы преодолеть это есть несколько вариантов:
если это какой-то внешний модуль, можно добавить его в
forced builtins
Так что PyDev создает оболочку для получения информации о времени выполнения (см. http://pydev.org/manual_101_interpreter.html для деталей) -- т. е.: в основном, PyDev импортирует модуль в оболочку и делаетdir(module)
иdir
на классы, найденные в модуле, чтобы представить завершения и сделать анализ кода.вы можете использовать Ctrl+1 (Cmd+1 для Mac) в строке с ошибкой, и PyDev предоставит вам возможность добавить комментарий, чтобы игнорировать это ошибка.
можно создать
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 шага работают для меня все время:
- подтвердите (иначе добавьте) родительскую папку модуля в PYTHONPATH.
- добавьте полное имя модуля к принудительным встроенным файлам.
то, что нужно отметить здесь:
некоторые популярные модули устанавливаются с некоторой родительской и дочерней парой, имеющей то же имя. В этих случаях вам также нужно добавить этого родителя в PYTHONPATH, в дополнение к его папке grandparent, которая вы уже подтвердили / добавили для всего остального.
используйте (например) "google.appengine.прикладной программный интерфейс.memcache "при добавлении в принудительные встроенные файлы, а не только" memcache", где" google " в этом примере является непосредственным дочерним элементом папки, определенной в PYTHONPATH.