在git pre-commit中使用Python requests遇ModuleNotFoundError求助
解决pre-commit钩子中requests模块找不到的问题
pre-commit会为每个钩子创建独立的隔离运行环境,和你本地的pipenv虚拟环境、全局Python环境是分开的,所以直接在钩子脚本里import requests会触发ModuleNotFoundError。下面给出两种可行的解决方法:
方法一:让pre-commit自动安装依赖
修改.pre-commit-config.yaml,在钩子配置里添加additional_dependencies字段,指定需要安装的requests库。pre-commit会在初始化钩子时自动在隔离环境中安装这个依赖。
修改后的配置文件:
repos: - repo: local hooks: - id: pre-commit-py name: pre-commit-py entry: python hooks/pre-commit.py language: python pass_filenames: false additional_dependencies: ['requests']
方法二:指定钩子使用本地pipenv环境
如果你想让钩子直接使用你已安装好requests的pipenv环境,可以修改entry命令为pipenv启动脚本,同时将language设为system,告诉pre-commit不要创建隔离环境,使用你指定的虚拟环境。
修改后的配置文件:
repos: - repo: local hooks: - id: pre-commit-py name: pre-commit-py entry: pipenv run python hooks/pre-commit.py language: system pass_filenames: false
另外,你的钩子脚本里url变量未定义,需要补充目标URL才能正常运行,修改后的脚本示例:
import os import sys import requests # 替换成你需要校验的目标URL url = "https://example.com" try: response = requests.get(url, timeout=5) if response.status_code == 200: print('URL校验通过') else: print(f'URL返回状态码异常: {response.status_code}') sys.exit(1) except Exception as e: print(f'URL校验失败: {str(e)}') sys.exit(1)
内容的提问来源于stack exchange,提问作者beautysleep
相关产品推荐
相关产品推荐

