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
告诉预提交创建自己的python
virtualenv
如果您不希望您可以使用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
)
免责声明:我创建了预提交