预提交未找到 python 个包
Pre-commit not finding python packages
我正在使用 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
我该如何解决这个问题。 (一位同事通过 运行ning /Users/[]/.cache/pre-commit/repo180cws4u/bin/python install -m six
解决了这个问题,但感觉不对..必须可以配置为使用系统包或类似的..?
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: python
的 local
存储库,您应该在 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]
免责声明:我创建了预提交
我正在使用 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
我该如何解决这个问题。 (一位同事通过 运行ning /Users/[]/.cache/pre-commit/repo180cws4u/bin/python install -m six
解决了这个问题,但感觉不对..必须可以配置为使用系统包或类似的..?
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: python
的 local
存储库,您应该在 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]
免责声明:我创建了预提交