忽略黑色格式化程序的 pyproject.toml 文件中的 Django 迁移

Posted

技术标签:

【中文标题】忽略黑色格式化程序的 pyproject.toml 文件中的 Django 迁移【英文标题】:Ignoring Django Migrations in pyproject.toml file for Black formatter 【发布时间】:2020-06-08 09:29:29 【问题描述】:

我刚刚为我的 Django 存储库设置了 Black 和 Pre-Commit。

我使用了我遵循的教程中的 Black 的默认配置,它运行良好,但我无法从中排除我的迁移文件。

这是我一直使用的默认配置:

pyproject.toml

[tool.black]
line-length = 79
include = '\.pyi?$'
exclude = '''
/(
    \.git
  | \.hg
  | \.mypy_cache
  | \.tox
  | \.venv
  | _build
  | buck-out
  | build
  | dist
)/
'''

我使用Regex101.com 来确保^.*\b(migrations)\b.*$ 匹配apps/examples/migrations/test.py

[tool.black]
line-length = 79
include = '\.pyi?$'
exclude = '''
/(
    \.git
  | \.hg
  | \.mypy_cache
  | \.tox
  | \.venv
  | _build
  | buck-out
  | build
  | dist
  | ^.*\b(migrations)\b.*$
)/
'''

当我将该正则表达式行添加到我的配置文件并运行 pre-commit run --all-files 时,它会忽略 .git 文件夹,但仍会格式化迁移文件。

【问题讨论】:

您找到解决方案了吗? @ClarkSandholtz 你为什么不接受任何答案,或者解释为什么它们不适合你? @sinoroc 迁移的格式最终并不是什么大问题,所以我暂时不用担心修复它。很抱歉这件事做得很慢。 【参考方案1】:

exclude 配置维护两个不同的位置如果可以避免的话看起来并不好,并且对于 CI 也不起作用(如果您想在 PR 检查中干运行黑色)。 为 pyproject.toml 添加以下工作,然后您可以在预提交挂钩和 CI 中运行相同的工作:

[tool.black]
...
exclude = '''

(
  /(
    ...
    | .+/migrations
  )/
)
'''

【讨论】:

【参考方案2】:

将迁移排除添加到您的 .pre-commit-config.yaml 文件中

- id: black
  exclude: ^.*\b(migrations)\b.*$

【讨论】:

【参考方案3】:

这就是问题的解决方案:pyproject.toml

[tool.black]
exclude = '''
/(
  | migrations
)/

'''

【讨论】:

您能否传递有关在排除选项下使用此语法的文档?这部分是 TOML 语言还是黑色的?在黑色文档中找不到它... 对不起,我不记得我从哪里得到的,它已经在我的项目中了:(【参考方案4】:

试试这个(注意最后一行):

[tool.black]
line-length = 79
include = '\.pyi?$'
exclude = '''
/(
    \.git
  | \.hg
  | \.mypy_cache
  | \.tox
  | \.venv
  | _build
  | buck-out
  | build
  | dist
  | migrations
)/
'''

【讨论】:

以上是关于忽略黑色格式化程序的 pyproject.toml 文件中的 Django 迁移的主要内容,如果未能解决你的问题,请参考以下文章

pyproject.toml 文件是做啥用的?

如何编写可以安装包的最小工作 pyproject.toml 文件?

Scikit-learn 安装 - 准备元数据 (pyproject.toml) ... 错误

错误:无法为 gevent 构建***,这是安装基于 pyproject.toml 的项目所必需的

错误:无法为 pymssql 构建***,这是在 Mac M1 中安装基于 pyproject.toml 的项目所必需的

MacOS Python安装which is required to install pyproject.toml-based projects解决办法