Как исправить ошибки PyDev «Неопределенная переменная из импорта»? - PullRequest
132 голосов
/ 21 января 2010

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

from settings import settings
settings.main = object()

В некоторых моих кодах, но не во всех, такие выражения, как:

from settings import settings
print settings.main 

... генерировать сообщения «Неопределенная переменная из import: main» на панели ошибок кода Eclipse, даже если код работает без проблем. Как я могу исправить это?

Ответы [ 12 ]

151 голосов
/ 12 февраля 2010

Для кода в вашем проекте единственный способ - добавить объявление о том, что вы ожидали, что - возможно, защищены 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 также содержит подробности об этом).

47 голосов
/ 31 октября 2011

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

Я полностью удалил эти ошибки, перейдя по адресу:

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

И это все.

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

17 голосов
/ 21 мая 2015

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

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

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

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

9 голосов
/ 16 декабря 2011

У меня была похожая проблема с проектом 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.

6 голосов
/ 19 августа 2016

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

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

шаг 2) Окно - Настройки - PyDev - Интерпретаторы - Интерпретатор Python Перейдите на вкладку «Принудительные встроенные функции». Нажмите на Новый ... Введите название модуля (в моем случае curses) и нажмите OK

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

1 голос
/ 02 февраля 2015

Пример того, что я делал:

import module.submodule

class MyClass:
    constant = submodule.constant

На что Пилинт сказал: E: 4,15: Undefined variable 'submodule' (undefined-variable)

Я решил эту проблему, изменив свой импорт следующим образом:

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

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

1 голос
/ 30 августа 2011

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

0 голосов
/ 04 июня 2016

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

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

На что стоит обратить внимание:

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

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

0 голосов
/ 23 июля 2014

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

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.gdk» в список.

Теперь сообщение об ошибке больше не отображается.

0 голосов
/ 14 января 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...