pylint не нравится pkg_resources.resource_filename
-
27-10-2019 - |
Вопрос
В своем скрипте я использую:
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_)