You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:20:29