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

Windows下Git Hooks无法运行:Python模块导入失败排查

Git Hooks Python脚本在Windows导入模块失败的解决方案

这个问题我之前也碰到过!核心原因是Windows和Unix系统处理符号链接执行时的工作目录逻辑不一样:

  • 在Unix(比如Mac)上,通过符号链接执行Python脚本时,Python会自动将符号链接指向的实际脚本所在目录加入sys.path,所以你能顺利导入同目录的utils.py。
  • 但在Windows上,Git执行钩子时的工作目录是.git/hooks,而不是你的版本化钩子所在的git-hooks目录,导致utils.py的目录不在sys.path里,自然导入失败。

最靠谱的跨平台解决方案:动态添加脚本目录到sys.path

在你的pre-commit脚本开头,加入一段代码,自动解析当前脚本的实际路径(不管是符号链接还是原文件),并把该目录加入sys.path,这样就能跨平台解决导入问题:

#!/usr/bin/env python
import sys
import os

# 获取当前脚本的实际物理路径(解析符号链接)
script_real_path = os.path.realpath(__file__)
# 提取脚本所在的目录
script_dir = os.path.dirname(script_real_path)
# 将脚本目录加入sys.path的最前面,确保优先找到同目录的模块
sys.path.insert(0, script_dir)

# 现在可以正常导入utils了
import utils

# 后面写你的钩子逻辑...

为什么这个方法有效?

  • os.path.realpath(__file__)会自动解析符号链接,拿到git-hooks/pre-commit的实际路径,而不是.git/hooks/pre-commit这个符号链接的路径。
  • 把这个目录加入sys.path后,Python就能找到同目录下的utils.py,不管在Windows还是Unix系统上,逻辑都是一致的。

额外验证小技巧

你可以在脚本里加一行打印sys.path的代码,确认路径是否正确:

print("Current sys.path:", sys.path)

执行提交后,在Windows上应该能看到你的git-hooks目录已经出现在sys.path列表里,这就说明路径已经正确添加了。


内容的提问来源于stack exchange,提问作者Ogen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:57:04