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