如何为诗歌和预提交包版本提供单一的真实来源?

How to have a single source of truth for poetry and pre-commit package version?

我正在调查 this Python project template. They use poetry to define dev dependencies

[tool.poetry.dev-dependencies]
black = {version = "*", allow-prereleases = true}
flake8 = "*"
isort = "^5.6"
mypy = ">0.900,<1"
...

他们还使用 pre-commit 检查内部事务(例如,格式化、linting、分类等),用于 git 和 CI 工作流程:

minimum_pre_commit_version: 2.8.0
default_stages: [commit, push, manual]
repos:
  - repo: https://github.com/psf/black
    rev: 21.11b1
    hooks:
      - id: black
  - repo: https://github.com/pycqa/flake8
    rev: 4.0.1
    hooks:
      - id: flake8
        args: [--max-line-length=88]
  - repo: https://github.com/pycqa/isort
    rev: 5.10.1
    hooks:
      - id: isort
        args: [--filter-files]
  - ...

就我而言,我绝对想要一个由 poetry 为我的 IDE 管理的本地版本的开发包,而且我还想按原样利用预提交框架 " “,没有切换到 language: system。以这种方式工作,我需要在两个不同的地方管理每个包版本。

是否有非手动方式来保留开发包版本(即。blackflake8isortmypy、 ...) 与单一事实来源对齐? Coockiecutter 模板可能是一个选项,但它看起来有点过分了。

我建议仅在 pre-commit.

的配置中保留 linter 内容

pre-commit 不一定 运行 作为预提交挂钩。您可以 运行 每次 pre-commit run --all-files 进行检查,或者如果您想 运行 仅对具有 pre-commit run --files path/to/file.

的给定文件进行检查

您甚至可以说出应该 运行 进行哪项检查,例如pre-commit run black --all-files

最后,我创建了一个预提交挂钩来完成这项工作:https://github.com/floatingpurr/sync_with_poetry

此挂钩只是使 .pre-commit-config.yaml 中的回购 rev 与锁定在 poetry.lock.

中的软件包版本保持同步

如果您使用:

  • 依赖管理诗
  • 您 IDE 的本地开发包(通过 Poetry)
  • 预提交挂钩

这个 meta-hook 可以帮助您(取消)提升 repos 版本。