【问题标题】:Flake8 - how to exclude all files from a project by listing every file?Flake8 - 如何通过列出每个文件来排除项目​​中的所有文件?
【发布时间】:2019-06-16 09:09:00
【问题描述】:

我正在旧版 Python 代码库上设置 flake8。我的想法是明确列出所有.py 文件的名称,格式类似于:

[flake8]
files_to_ignore = 
  foo.py,
  bar.py,
  spam.py

然后,在项目上运行flake8时,它会通过,因为没有要运行的文件。然后我们修复一个文件并将其从列表中排除,这意味着它将由 linter 检查。然后对每个现有文件重复此过程。

但是,我看不到任何通过从阅读文档中明确列出所有文件来排除所有文件的方法。有--exclude=<patterns> 但这会忽略所有文件(我将无法按名称过滤文件)。

我发现可以通过在空行上添加一行# flake8: noqa 来忽略整个文件。这是实现我想要的唯一选择吗?

【问题讨论】:

    标签: python lint flake8


    【解决方案1】:

    --exclude=<patterns>,但这会忽略所有文件(我将无法按名称过滤文件)。

    单个文件名是一个模式,一个只匹配单个文件名的模式。 exclude 的默认值是 .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,它是文字文件和目录名称的序列。

    只需将您的文件名列为排除模式,因为您从列表中删除单个名称,它们将被检查。

    flake8 首先测试基本文件名(无路径),然后针对每个模式测试绝对路径。如果您的文件名不是唯一的(出现在文件树中的多个位置),则在文件前面加上前缀为 */ 的相对项目路径;所以在下面的树中

    project/
    ├── bar
    │   ├── __init__.py
    │   └── example.py
    ├── example.py
    └── foo
        ├── __init__.py
        └── example.py
    

    */project/example.py*/project/foo/example.py*/project/bar/example.py 模式与 3 个单独的 example.py 文件完全匹配。

    【讨论】:

    • 谢谢,我试过了。我已经指定了文件的路径(带有文件名的文件夹),但是由于它是一种模式,存储在不同子文件夹中的同名文件将使该策略无法使用——它们会被完全忽略。
    • @AlexTereshenkov:仅当模式与文件名匹配时。在此处包含目录和斜杠会有所帮助。
    • 谢谢,如果两个文件同名但位于不同的目录,则很遗憾会忽略它们。我使用了目录/文件名结构,但它不起作用。您能否使其适用于一个简单的两个文件夹,其中一个同名的文件以相同的名称存储?
    • @AlexTereshenkov:我添加了一个例子。
    • @Marijn,谢谢你的例子。我必须使用[flake8] exclude = project/example.py, project/foo/example.py, project/bar/example.py 才能单独过滤掉它们。所以,*/project/foo/example.py 不起作用,但project/foo/example.py - 看起来在 Windows 机器上需要没有星星的路径。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    相关资源
    最近更新 更多