【问题标题】:Pre-commit not finding python packages预提交找不到 python 包
【发布时间】:2021-05-16 09:13:48
【问题描述】:

我正在使用 pyenv 来支持拥有不同版本的 python。

在使用 python 3.7 的项目中,我还希望在更改代码时使用 pre-commit 进行 linting。

但是当 lint 规则运行时,预提交似乎在用户下的缓存文件夹中查找 python 包,因此无法找到它们..即使它们安装在系统级别。例如:

>git ci -m'lint test'  
...
...
/Users/[]/.cache/pre-commit/repo180cws4u/py_env-python3.7/lib/python3.7/site-packages/ 
...
ModuleNotFoundError: No module named 'six'


>pip list | grep six
six                 1.11.0

我该如何解决这个问题。 (一位同事通过运行/Users/[]/.cache/pre-commit/repo180cws4u/bin/python install -m six 解决了这个问题,但感觉不对。必须可以配置为使用系统包或类似的......?

【问题讨论】:

  • 请显示您的实际配置和未经修改的输出——您掩盖了有用的信息

标签: python pyenv pre-commit pre-commit.com


【解决方案1】:

pre-commit 会为每个工具安装隔离环境,这样它们就不会干扰本地开发。听起来您在该环境中缺少依赖项

非常不支持在缓存环境中运行pip install,这样做可能会破坏预提交。它们是故意私有的实现细节,所以你不要弄乱它们!

您有两个主要选择:

让您的脚本独立工作(支持的方式)

设置您的工具,以便它们正确指定它们的依赖项(您还没有显示您的配置,但我猜您正在调用一些脚本?)

对于已安装的存储库,工具的依赖项应列在设置元数据中(通常为setup.py/setup.cfg/pyproject.toml

例如pre-commit/pre-commit-hooks指定these dependencies

# setup.cfg
install_requires =
    ruamel.yaml>=0.15
    toml

对于带有language: pythonlocal 存储库,您应该在additional_dependencies 中指定您的依赖关系——例如:

-   repo: local
    hooks:
    -   id: run-the-thing
        name: run the thing
        entry: ./scripts/lint
        additional_dependencies: [six, ...]
        language: python
        types: [python]

存储库本地挂钩(逃生舱口)

对于language: system / language: script,预提交不会提供环境。建立这样的环境是每个用户的责任。这些是正常方式的逃生舱,因为它们首先破坏了框架的目的(即自行提供必要的工具——而不需要每个开发人员仔细管理一堆工具)

对于repo: local,您可以使用language: system,并且希望您的脚本在用户环境配置错误时产生有用的错误消息

-   repo: local
    hooks:
    -   id: run-the-thing
        name: run the thing
        entry: ./scripts/lint
        language: system
        types: [python]

免责声明:我创建了预提交

【讨论】:

  • 谢谢你,一个好的和准确的答案!感觉这应该会有所帮助。但是我找不到我们的配置..我们使用 pip install 安装预提交。我们有一些额外的 linting 规则,但没有任何我能找到的用于预提交的配置文件.. 既不在 repo 也不在我的主文件夹中 我应该在哪里看?
  • 预提交配置位于./.pre-commit-config.yaml
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 2015-08-23
  • 2020-12-06
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多