Вопрос

В своем скрипте я использую:

python from pkg_resources import resource_filename

И PyDev, и pylint 0.23 жалуются на неразрешенный импорт здесь.

E0611 No name 'resource_filename' in module 'pkg_resources'

Как я понимаю, это происходит из-за того, что и PyDev, и pylint выполняют только анализ исходного кода, фактически не пытаясь его разобрать / скомпилировать.И , по - видимому pkg_resources определяет ли что-то особенное pkg_resources.Упаковка и символ, конечно же, есть, и все это работает просто отлично.Два вопроса:

  • Как я могу убедить Eclipse и PyDev в том, что они ошибаются?
  • Что вызывает проблему в первую очередь?Я не встречал других людей, у которых были бы подобные проблемы, и я сомневаюсь, что моя ситуация в чем-то уникальна...:)

Python 2.7.1 (под OSX), распространяется 0.6.19.

Это было полезно?

Решение

Вы можете загружать проблемные динамические модули, изменив определение интерпретатора python в pydev вашего проекта. Настройте список "принудительно встроенных модулей" по умолчанию чтобы включить динамически генерируемые определения, которые вы используете.Принудительные встроенные модули генерируются путем выделения и загрузки / проверки динамически генерируемых классов.

В определении интерпретатора python (preferences => pydev => interpreters => python interpreter), выберите используемый вами в данный момент интерпретатор для вашего проекта pydev.Выберите нужный Forced Builtins вкладка.Нажмите кнопку New... нажмите кнопку и добавьте pkg_resources к списку.

Я сделал это, и теперь мои ошибки исчезли, и автозаполнение методов работает нормально для моего проекта.Я использую python 2.7.9, pydev 3.3.3 и eclipse kepler r2.

Для pylint вы можете отключите предупреждение глобально в конфигурации pylint вашего проекта, для всего файла или для одного экземпляра его использования.Вы можете добавить # pylint: disable=E1101 прокомментируйте в начале вашего файла, чтобы отключить его для этого модуля, или в строке выше, где вы используете его, чтобы просто отключить его для этого экземпляра.Существует также, возможно, трудоемкий способ вручную намекните pylint, что у вашего класса есть определенные методы.

Другие советы

У меня была такая же проблема.Для Pydev я нашел ответ вкл . pydev.org:Перейдите к строке ошибки, нажмите ctrl-1 и выберите "неопределенная переменная".Затем он добавит #@UndefinedVariable прокомментируйте, и ошибка исчезнет.

Для pylint отключение E1101 делает свое дело, pragma # pylint: disable=E1101.Прагмы Pylint просто должны иметь одинаковый уровень отступа, но комментарий pydev должен быть в той же строке.Моя несколько загроможденная комментариями функция стала:

def get_test_datafile(file_):
    # pylint: disable=E1101
    return pkg_resources.resource_string(__name__, #@UndefinedVariable
                                         'testdata/'+file_)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top