Как сказать Pylint, чтобы игнорировать определенный импорт? - PullRequest
16 голосов
/ 07 марта 2012

Я занимаюсь разработкой программного обеспечения для Windows на Python.Я занимаюсь разработкой для Linux и использую Pylint для проверки своего кода.Я не могу избавиться от ошибки:

F| Unable to import '_winreg'   

Это очевидно - Python в Linux не имеет этого модуля.

Итак, что мне нужно добавить в мой .pylintrc, чтобы игнорировать эту ошибку?

Заранее спасибо, Оз

РЕДАКТИРОВАТЬ:

Документация говорит:

:F0401: *Unable to import %r*
  Used when pylint has been unable to import a module.

Теперь мне нужно найти, как его использовать ...

Частичное решение:

pylint --disable=F0401 <filename>

Я все еще ищу способ сделать через.pylintrc.

Ответы [ 5 ]

14 голосов
/ 06 сентября 2016

Просто запустите это также со следующим кодом:

 8: if os.name == 'nt':
 9:    import msvcrt
10: else:
11:    import fcntl

pylint не удалось построить с этой ошибкой:

E:  9, 4: Unable to import 'msvcrt' (import-error)

The решение доступно с pylint 0.10:

 9:    import msvcrt  # pylint: disable=import-error
10 голосов
/ 08 марта 2012

Решение, которое я видел, использовалось на моем рабочем месте, где есть специальный модуль, в который Pylint не может попасть (Python встроен, и этот специальный модуль находится внутри основного исполняемого файла, в то время как Pylint запускается в обычном Python установка) состоит в том, чтобы смоделировать его, создав файл .py и поместив его в путь python при запуске pylint (см. Ошибка PyLint «Не удается импортировать» - как установить PYTHONPATH? ).

Таким образом, у вас может быть каталог "pylint-fakes", содержащий пустой _winreg.py (или если вам нужно проверить импортированные имена, не пустые, а с поддельными переменными).

9 голосов
/ 28 июня 2018

Вопрос довольно старый, но сейчас вы можете игнорировать модули с .pylintrc вроде:

ignored-modules=module1,module2,...

Я использовал его для подавления проверки деинсталлируемых модулей сторонними инструментами CI, и он прекрасно работает.

8 голосов
/ 08 марта 2012

Для тех, кто действительно хочет игнорировать модули, я помещаю сюда свой маленький патч для pylint: В /pylint/checkers/imports.py'

262     def get_imported_module(self, modnode, importnode, modname):
+263         import sys
+264         ignoreModules = ['_winreg', 'your', 'bogus','module','name']
265         try:        
+266             if sys.platform =='linux2' and modname not in ignoreModules:
267                 return importnode.do_import_module(modname)
268         except astng.InferenceError, ex:
269             if str(ex) != modname:
270                 args = '%r (%s)' % (modname, ex)

Этот маленький хак делает работу лучше, чем просто игнорирует все предупреждения. Оптимально, если у меня будет время, я поставлю патч для этого через файл .pylintrc.

0 голосов
/ 07 марта 2012

[Редактировать: Это не желаемое решение, так как запрашивается изменение в файле проверки пиллинга, но я оставляю его на случай, если сам код можно изменить, чего нельзя после комментария]:

Поместите блок try / исключением вокруг оператора импорта.

Или даже лучше. что-то вроде:

CONFIG = 'Unix'


if CONFIG == 'Unix':
    import  UnixLib
elif CONFIG == 'Win':
    import  WinLib
else:
   assert False
...