如何告诉pylint忽略某些导入?

时间:2012-03-07 13:57:24

标签: python pylint

我正在使用Python开发Windows软件。我在Linux上开发,我正在使用 Pylint检查我的代码。 我无法摆脱错误:

F| Unable to import '_winreg'   

这很明显 - Linux上的Python没有这个模块。

那么,我必须在我的.pylintrc中放置什么来忽略这个错误?

提前致谢, 盎司

编辑:

文档说:

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

现在我需要找到如何使用它......

部分解决方案:

pylint --disable=F0401 <filename>

我仍在寻找通过.pylintrc做的方法。

5 个答案:

答案 0 :(得分:14)

请使用以下代码进行此操作:

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

pylint failed the build出现此错误:

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

pylint 0.10:

以来solution可用
 9:    import msvcrt  # pylint: disable=import-error

答案 1 :(得分:10)

我在我的工作场所使用的解决方案,其中有一个Pylint可能无法访问的特殊模块(Python是嵌入式的,这个特殊模块位于主可执行文件中,而pylint是在常规Python安装)是通过创建.py文件并在运行pylint时将其放在python路径中来模拟它(参见PyLint "Unable to import" error - how to set PYTHONPATH?)。

所以,你可能会有一个&#34; pylint-fakes&#34;包含空_winreg.py的目录(或者如果需要检查导入的名称,不是空的但是有伪造的变量)。

答案 2 :(得分:9)

问题已经很老了,但是现在您可以忽略带有.pylintrc的模块,例如:

ignored-modules=module1,module2,...

我已使用它来抑制第三方CI工具对可卸载模块的检查,并且效果很好。

答案 3 :(得分:8)

对于那些真正想忽略模块的人,我在这里放置我的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文件添加补丁。

答案 4 :(得分:0)

[编辑:这不是想要的解决方案,因为请求更改了pylint检查文件,但是我保留它以防代码本身可以更改,这不能在评论之后]:

在import语句周围放置一个try / except块。

甚至更好。类似的东西:

CONFIG = 'Unix'


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