如何拥有诗歌和预提交包版本的单一事实来源?

flo*_*urr 23 python pre-commit-hook python-poetry pre-commit.com

我正在研究这个Python 项目模板。它们用于poetry定义开发依赖项

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

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

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]
  - ...
Run Code Online (Sandbox Code Playgroud)

就我而言,我肯定想要一个由 Poetry 为我的 IDE 管理的本地版本的开发包,并且我还想“按原样”利用预提交框架,而不需要切换到language: system. 通过这种方式,我需要在两个不同的地方管理每个包版本。

是否有一种非手动方法可以使开发包版本(即,.,,,, black... flake8)与单一事实来源保持一致?isortmypy Coockiecutter 模板可能是一种选择,但它看起来有点过分了。

flo*_*urr 18

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

编辑:如果你使用PDM,可以参考这个: https: //github.com/floatingpurr/sync_with_pdm

rev这个钩子只是使存储库与.pre-commit-config.yaml锁定到的软件包版本保持同步poetry.lock

如果您使用:

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

这个元钩子对于为你提高(取消)repos rev 很有用。


fin*_*mer 6

我建议仅将 linter 内容保留在pre-commit.

pre-commit不一定作为预提交挂钩运行。您可以每次运行检查,pre-commit run --all-files或者如果您只想在给定文件上运行检查pre-commit run --files path/to/file

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

  • 我明白了,但我需要它们的另一个副本用于 IDE 提供的实时交互(例如 VS Code) (4认同)