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

Я занимаюсь разработкой программного обеспечения для 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 ответов

Решение

Для тех, кто действительно хочет игнорировать модули, я помещаю сюда свой маленький патч для 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 файл.

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

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

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

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

Решение доступно с pylint 0,10:

 9:    import msvcrt  # pylint: disable=import-error

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

ignored-modules=module1,module2,...

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

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

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

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

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

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

CONFIG = 'Unix'


if CONFIG == 'Unix':
    import  UnixLib
elif CONFIG == 'Win':
    import  WinLib
else:
   assert False
Другие вопросы по тегам