预先提交不使用虚拟环境

pre-commit not using virtual environment

我将此添加到 pre-commit-config.yml

-   repo: local
    hooks:
    -   id: python-hook
        name: python-hook
        entry: python python_script.py
        language: python
        pass_filenames: false

其中python_script.py有以下内容

#!/usr/bin/env python

import os

print(os.environ["VIRTUAL_ENV"])

import requests

requests 安装在活动虚拟环境中,当我 运行 预提交时我得到这个输出

/path/to/home/.cache/pre-commit/repouecs3sp4/py_env-python3.7
Traceback (most recent call last):
  File "python_script.py", line 7, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

这里的问题是虚拟环境的路径显然切换到了另一个路径 /path/to/home/.cache/pre-commit/repouecs3sp4/py_env-python3.7

我在这里遗漏了什么吗?感谢您的帮助

pre-commit 的一点是它在隔离环境中安装工具,因此它们不会干扰您当前开发环境所处的任何状态 -- language: python 告诉 pre-commit 创建自己的python 虚拟环境

如果您不想,可以使用 language: system——但这是当您不想要托管工具时不受支持的逃生舱口(请注意,预提交不会提供这些工具为您的贡献者提供环境,因此他们需要确保已设置并激活特定环境)

更好的 方法是声明您的 local 挂钩需要预先提交的依赖项,以便它可以使用 additional_dependencies 为您提供环境-- 例如,如果您的工具需要 packaging

repos:
-   repo: local
    hooks:
    -   id: python-hook
        name: python-hook
        entry: python python_script.py
        language: python
        pass_filenames: false
        additional_dependencies: [packaging]

再次注意,预提交不会从被测存储库安装(如果是,缓存将很难处理)所以你不能在 additional_dependencies 中使用 -r requirements.txt 之类的东西)


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