预提交不使用虚拟环境

cav*_*rac 7 git pre-commit pre-commit-hook python-3.x pre-commit.com

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

-   repo: local
    hooks:
    -   id: python-hook
        name: python-hook
        entry: python python_script.py
        language: python
        pass_filenames: false
Run Code Online (Sandbox Code Playgroud)

哪里python_script.py有以下内容

#!/usr/bin/env python

import os

print(os.environ["VIRTUAL_ENV"])

import requests

Run Code Online (Sandbox Code Playgroud)

该软件包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'
Run Code Online (Sandbox Code Playgroud)

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

我在这里缺少什么吗?感谢您的帮助

Ant*_*ile 22

预提交的一点是它在隔离的环境中安装工具,这样它们就不会干扰您当前开发环境所处的任何状态——language: python告诉预提交创建自己的pythonvirtualenv

如果您不希望您可以使用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]
Run Code Online (Sandbox Code Playgroud)

再次注意,预提交不会从测试中的存储库安装(如果这样做,缓存将很难处理),因此您不能使用类似的-r requirements.txt东西additional_dependencies


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

  • 我正在尝试进行预提交检查我的Python项目的requirements.txt是否与pip freeze(对于我当前的venv)匹配 - 有没有办法强制它使用提交者当前使用的任何venv? (6认同)