【问题标题】:How to have a single source of truth for poetry and pre-commit package version?诗歌和预提交包版本如何拥有单一的事实来源?
【发布时间】:2022-01-04 16:56:58
【问题描述】:

我正在研究this Python 项目模板。他们使用poetry 来定义dev dependencies

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

他们还使用 pre-commit 来检查 git 和 CI 工作流程的内务处理(例如,格式化、linting、issorting 等):

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]
  - ...

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

有没有一种非手动的方式来保持开发包版本(即。blackflake8isortmypy、...)与单一事实来源保持一致? 一个 Coockiecutter 模板可能是一种选择,但它看起来有点矫枉过正。

【问题讨论】:

  • 在某些时候,您需要在两个地方提供信息 - 模板在 poetry.lock 中也有版本,因此您需要一些代码来同步两者
  • 是的,没错。一个选项可能是使用 e 元模板来同步它们。谢谢。
  • 最后,我创建了一个预提交挂钩来完成这项工作。请在下面查看我的答案

标签: python pre-commit-hook python-poetry pre-commit.com


【解决方案1】:

我建议仅将 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)
  • 不确定它在 VS Code 中是如何工作的。因为您可以对特定文件 (pre-commit run &lt;check&gt; --files &lt;filepath&gt;) 运行特定的预提交检查,所以在 PyCharm 中像在“外部工具”中一样运行它是没有问题的。我猜 VS Code 也有类似的东西。
  • 已编辑评论:感谢您的建议。你的猜测是对的。 VS Code 需要指向每个 linter / formatter 路径,然后将其传递给指定的 python 解释器。例如,"python.formatting.blackPath":"black"。我还没有找到传递配置pre-commit run black --files &lt;filepath&gt; 的方法。这似乎与 VS Code 的工作方式不太匹配。
  • 感谢@finswimmer 的建议!
【解决方案2】:

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

这个钩子只是保持.pre-commit-config.yaml中的repos rev与锁定在poetry.lock中的包版本同步。

如果你使用:

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

这个 meta-hook 对你(取消)bump repos rev 很有用。

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 2022-11-29
    • 2015-11-13
    • 2021-05-02
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多