pylint被目录忽略

时间:2010-03-23 21:20:59

标签: python pylint

以下来自pylint docs

--ignore=<file>
    Add <file or directory> to the black list. It should be a base name, not a path. You may set this option multiple times. [current: %default]

然而,我没有幸运得到目录部分。

我有一个名为migrations的目录,它有django-south迁移文件。当我输入--ignore = migrations时,它仍然不断向我提供迁移目录中文件中的错误/警告。

可能是--ignore不适用于目录吗?

如果我甚至可以使用regexp来匹配被忽略的文件,那么django-south文件都被命名为0001_something,0002_something ...


由于我无法通过目录忽略工作,因此我只需将# pylint: disable-msg-cat=WCREFI放在每个迁移文件的顶部,这会忽略所有的pylint错误,警告和信息。

8 个答案:

答案 0 :(得分:23)

添加:

[MASTER]
ignore=migrations

我的.pylintrc适用于pylint 0.25。我的问题是PyDev,它似乎不尊重我的设置。我认为这是因为它正在运行pylint per-file,我认为它绕过'ignore'检查 - 无论是模块/目录还是文件。从PyDev调用pylint看起来像:

/path/to/site-packages/pylint/lint.py --include-ids=y /path/to/project/migrations/0018_migration.py

答案 1 :(得分:9)

您不能提供路径,只能提供目录的“basename”。例如。使用--ignore=lib代替--ignore-=appengine-toolkit/gaetk/lib

问题是您会忽略名为lib所有目录。

答案 2 :(得分:4)

尽管这是一个古老的问题,但是当我们搜索堆栈溢出时它会显示在顶部列表中,因此我在此处发布我们的解决方案,希望它可能对其他人有用。

要忽略名为3rdparty的目录树下的子目录,我们在ignore-patterns的{​​{1}}条目中添加了以下[MASTER]条目。

.pylintrc

这解决了pylint-1.7.1的问题。

最初,我们对注释中的“基本名称”子句感到困惑。显然,它确实接受带有通配符的路径。至少它对我们有用。您的里程可能会有所不同。

答案 3 :(得分:4)

截至目前,--ignore在目录上不起作用。 (https://github.com/PyCQA/pylint/issues/2686上有一个未解决的问题)

事实证明,只有文件名,而不是整个路径才针对黑名单进行测试。 (如同一拉取请求中所述:https://github.com/PyCQA/pylint/issues/2686#issuecomment-453450455

选项--ignore-patterns有相同的问题,但是在我检查时曾尝试对其进行修复。 (https://github.com/PyCQA/pylint/pull/3266

对于您而言,目前最好的解决方案是使用正则表达式匹配文件中所需的模式,这也是我的情况。由于我不太了解正则表达式,因此我建议使用https://regex101.com

答案 4 :(得分:1)

从 Pylint 2.9 开始,将有一个新的配置目录 ignore-paths,它与正则表达式匹配整个路径而不是基本名称。

另见:

答案 5 :(得分:0)

实际上,对于pylint 2.3.1,存在一个未解决的问题。

如果将目录设置为“忽略”选项,它将不会忽略它。

答案 6 :(得分:0)

似乎您需要做一些猴子补丁reference,该补丁对pylint 2.5.3版适用于我。只是不知道为什么pylint无法解决忽略路径的问题。

init-hook=
    sys.path.append(os.getcwd());
    from pylint_ignore import PylintIgnorePaths;
    PylintIgnorePaths('my/thirdparty/subdir', 'my/other/badcode')

然后创建pylint_ignore.py:

from pylint.utils import utils


class PylintIgnorePaths:
    def __init__(self, *paths):
        self.paths = paths
        self.original_expand_modules = utils.expand_modules
        utils.expand_modules = self.patched_expand

    def patched_expand(self, *args, **kwargs):
        result, errors = self.original_expand_modules(*args, **kwargs)

        def keep_item(item):
            if any(1 for path in self.paths if item['path'].startswith(path)):
                return False

            return True

        result = list(filter(keep_item, result))

        return result, errors

答案 7 :(得分:-1)

然后,您可以使用Bash扩展:

--ignore=migrations/{0000..1000}_something