[BUG] pre-commit hooks fail on Windows due to hardcoded Unix virtual environment path

该报错发生在 Windows 上运行 CrewAI 仓库的 pre-commit 本地钩子时,原因是钩子配置中硬编码了 Unix 风格虚拟环境激活路径 `.venv/bin/activate`,而 Windows 上并不存在该路径。优先排查你的 `.pre-commit-config.yaml` 是

快速结论:该报错发生在 Windows 上运行 CrewAI 仓库的 pre-commit 本地钩子时,原因是钩子配置中硬编码了 Unix 风格虚拟环境激活路径 `.venv/bin/activate`,而 Windows 上并不存在该路径。优先排查你的 `.pre-commit-config.yaml` 是否为本地钩子配置了 `bash -c ‘source .venv/bin/activate && …’` 这类入口命令。

适用环境:Windows 11、Python 3.12、CrewAI 1.15.12、虚拟环境为 Venv(经 `uv sync` 创建),运行 `uv run pre-commit run –all-files` 时触发。

最快修复方案:暂无确认的一步修复方案。Issue 中提出了方向性建议:由于 pre-commit 钩子已经通过 `uv run` 调用命令,显式的虚拟环境激活步骤可能并非必需,建议移除钩子中硬编码的 `source .venv/bin/activate` 语句,或改用平台无关的激活方式。截至 Issue 关闭时,修复尚未被合并到主分支,需等待上游 PR 或自行修改本地配置。

注意事项:直接修改本地钩子配置可以绕过问题,但这不是官方验证过的修复。如果后续运行 `uv run` 时仍找不到工具包,可能需要保留激活步骤并改为平台判断写法,但该方案在 Issue 中仅作为推测提出,尚未经过验证。

问题场景

在 Windows 上克隆 CrewAI 仓库并按文档完成环境准备后,运行 uv run pre-commit run --all-files 触发 ruff、ruff-format、mypy 等本地钩子时,所有钩子都在真正执行前立即失败。同一环境下手动运行 uv run ruff check lib/ 则一切正常,说明故障仅限于 pre-commit 钩子配置本身。

报错原文

[BUG] pre-commit hooks fail on Windows due to hardcoded Unix virtual environment path

ruff.....................................Failed

.venv/bin/activate: No such file or directory

ruff-format..............................Failed

.venv/bin/activate: No such file or directory

mypy.....................................Failed

.venv/bin/activate: No such file or directory

原因分析

仓库的本地 pre-commit 钩子将入口命令配置为:

bash -c 'source .venv/bin/activate && uv run ruff check --config pyproject.toml "$@"' --

其中硬编码了 Unix 风格虚拟环境激活脚本路径 .venv/bin/activate。该路径在 Linux/macOS 上存在,但在 Windows 上不存在。Windows 下虚拟环境激活脚本位于 .venv\Scripts\ 目录下,因此钩子会在执行任一工具前因“找不到文件”而退出。Issue 指出,钩子已经通过 uv run 间接调用命令,激活步骤可能多余,这是“可能原因”层面的分析,尚未在合并代码中验证。

环境排查

  • 操作系统:Windows 11(其他 Windows 版本也可能触发同一问题)。
  • Python 版本:3.12。
  • CrewAI 版本:1.15.12。
  • 虚拟环境管理:Venv,经 uv sync 创建。
  • 执行命令:uv run pre-commit run --all-files
  • 确认自行运行 uv run ruff check lib/ 是否正常——以排除工具/依赖安装本身的问题。

解决步骤

  1. 确认问题范围:在项目根目录先手动执行 uv run ruff check lib/,如果直接运行工具成功,再执行 uv run pre-commit run --all-files 复现故障,锁定为钩子配置问题。
  2. 定位仓库中的本地钩子配置,找到包含 source .venv/bin/activate 的条目。
  3. 方案 A(可优先尝试):删除钩子入口中的 source .venv/bin/activate && 片段,保留 uv run 部分。因为 uv run 本身会自动定位并加载项目虚拟环境,显式 source 可能并非必需。该方案未经上游验证,修改后需完整测试。
  4. 方案 B(如果方案 A 后工具找不到依赖):将路径改为平台判断形式,在 Windows 上使用 .venv/Scripts/activate,在 Unix 上保留原路径,或用条件语法避免硬编码。该方案只是 Issue 中的推测,未提供现成代码。
  5. 在本地修改完配置后,不要直接提交,先运行 uv run pre-commit run --all-files 验证。

验证方法

重新执行 uv run pre-commit run --all-files,观察 ruff、ruff-format、mypy 是否能够正常启动并输出检查结果,而不是立即报 .venv/bin/activate: No such file or directory。如果钩子全部通过(或按代码问题正常报出 lint/格式/类型错误),说明钩子配置跨平台问题已解决。

参考来源

crewAIInc/crewAI #6863(关联 Linear issue:OSS-147)

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22544

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注