【问题标题】:how to tell pylint to ignore certain imports?如何告诉 pylint 忽略某些进口?
【发布时间】:2012-03-25 01:25:44
【问题描述】:

我正在使用 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 的方法。

【问题讨论】:

    标签: python pylint


    【解决方案1】:

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

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

    甚至更好。类似:

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

    【讨论】:

    • 相当有问题 - 我希望 pylint 忽略它。不要更改我的代码,这在这种情况下应该可以工作,因为它是 python 的内置代码。
    【解决方案2】:

    对于那些真正想忽略模块的人,我将我的 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 文件发布补丁。

    【讨论】:

    • 你有没有时间提交补丁?
    • 看起来即将发布的 pylint 1.5.0 将包含这样的补丁。
    【解决方案3】:

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

    因此,您可能有一个“pylint-fakes”目录,其中包含一个空的 _winreg.py(或者如果您需要检查导入的名称,不是空的,而是带有伪造的变量)。

    【讨论】:

    • 克里斯,谢谢你的建议。实际上,我也对嵌入我们工作场所的模块做了同样的事情。我的虚拟模块包含真实模块的所有成员。这也是一个有效的解决方案。当然,您会对此投赞成票:-)
    【解决方案4】:

    使用以下代码也可以遇到这种情况:

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

    pylintfailed the build 出现此错误:

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

    solution 自 pylint 0.10 起可用:

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

    【讨论】:

      【解决方案5】:

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

      ignored-modules=module1,module2,...
      

      我用它来禁止使用第三方 CI 工具检查可卸载模块,它工作得很好。

      【讨论】:

      • 我发现这需要在 IMPORTS 部分。
      • @greenmatt 它在我的.pylintrc 的[TYPECHECK] 中,可能版本不同。
      • 看起来这是在 1.2.1 中添加的,但在 1.4.4 中更新为适用于导入(即移至 [IMPORTS] 部分时。
      • 可以通过pylint-3 --generate-rcfile &gt; ~/.pylintrc生成一个空的.pylintrc文件
      猜你喜欢
      • 2019-06-27
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多