【问题标题】:pre-commit not using virtual environment预提交不使用虚拟环境
【发布时间】:2022-01-19 22:57:13
【问题描述】:

我将此添加到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 包安装在活动虚拟环境中,当我运行 pre-commit 时,我得到这个输出

/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

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

【问题讨论】:

    标签: python-3.x git pre-commit-hook pre-commit pre-commit.com


    【解决方案1】:

    pre-commit 的意义在于它在隔离环境中安装工具,因此它们不会干扰您当前开发环境的任何状态 -- language: python 告诉 pre-commit 创建自己的 python virtualenv

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

    更好的方法是声明你的local钩子需要预先提交的依赖项,这样它就可以使用additional_dependencies为你提供一个环境——例如,如果你需要@987654327 @ 在你的工具中:

    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 之类的东西)


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

    【讨论】:

    • 感谢详细解答,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2021-11-30
    • 1970-01-01
    • 2020-06-25
    相关资源
    最近更新 更多