Pylint не любит pkg_resources.resource_filename - PullRequest
5 голосов
/ 14 июня 2011

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

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.

Ответы [ 2 ]

6 голосов
/ 19 июня 2015

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

В определении интерпретатора 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 в начале вашего файла, чтобы отключить его для этого модуля, или в строке выше, где вы используете его, чтобы просто отключить его для этого экземпляра. Существует также, возможно, много времени, чтобы вручную намекнуть, что у вашего класса есть определенные методы .

3 голосов
/ 02 августа 2011

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

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

def get_test_datafile(file_):
    # pylint: disable=E1101
    return pkg_resources.resource_string(__name__, #@UndefinedVariable
                                         'testdata/'+file_)
...