52

以下来自Pylint 文档

--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不适用于目录?

如果我什至可以使用正则表达式来匹配被忽略的文件,它会起作用,因为 django-south 文件都被命名为 0001_something, 0002_something...


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

4

9 回答 9

41

将以下内容添加到我的.pylintrc文件中适用于 Pylint 0.25:

[MASTER]
ignore=migrations

我的问题在于 PyDev,它(似乎)不尊重我的设置。我认为这是因为它运行 Pylint 每个文件,我认为它绕过了“忽略”检查——无论是模块/目录还是文件。PyDev 对 Pylint 的调用如下所示:

/path/to/site-packages/pylint/lint.py --include-ids=y /path/to/project/migrations/0018_migration.py
于 2011-12-08T06:40:23.453 回答
14

为了忽略名为 的目录树下的子目录3rdparty,我们将以下ignore-patterns条目添加[MASTER].pylintrc.

# Add files or directories matching the regex patterns to the blacklist. The
# regex matches against base names, not paths.
# Ignore all .py files under the 3rdparty subdirectory.
ignore-patterns=**/3rdparty/**/*.py

这解决了 Pylint 1.7.1 的问题。

我们最初对评论中的“基本名称”条款感到困惑。显然它确实接受带有通配符的路径。至少它为我们做了。

于 2018-08-31T23:10:54.923 回答
12

您不能给出路径,而只能给出目录的“基本名称”。例如,使用--ignore=lib代替--ignore-=appengine-toolkit/gaetk/lib.

问题是您将忽略所有名为lib.

于 2015-09-09T13:07:27.677 回答
10

截至目前,--ignore不在目录上工作(GitHub上有一个未解决的问题,忽略子句不忽略目录#2686)。

事实证明,只有文件名,而不是整个路径针对黑名单进行测试。(正如在同一个拉取请求中指出的那样:geajack 的评论

该选项--ignore-patterns有同样的问题,但是当我检查时尝试修复它(添加ignore-paths以匹配完整路径#3266

在您的情况下,现在最好的解决方案是使用正则表达式来匹配您想要在文件中使用的模式,这也是我的情况。由于我不太精通正则表达式,因此我使用了我推荐的Regex101

于 2020-04-10T02:30:31.147 回答
3

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

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

于 2019-10-14T12:18:46.417 回答
2

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

也可以看看:

于 2021-05-28T09:04:39.407 回答
1

添加到Fabien 的答案中,--ignore-paths语法看起来像这样。

ignore-paths=^src/experiments/.*$,
             ^src/ingredients/.*$,
             ^src/scripts/.*$,
             ^src/tests/.*$

https://github.com/PyCQA/pylint/issues/2686#issuecomment-864585778

于 2021-10-18T16:00:13.020 回答
1

看来你需要做一些猴子补丁,这对我来说适用于 Pylint 版本 2.5.3。我只是不知道为什么 Pylint 没有解决忽略路径的方法。

将此添加到您的.pylintrc文件中:

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
于 2020-10-19T20:21:22.113 回答
-2

然后,您可以使用 Bash 扩展来发挥您的优势:

--ignore=migrations/{0000..1000}_something
于 2010-03-24T07:57:11.393 回答