我该如何让Claude Code了解我的Hatch环境?

编程语言 2026-07-10

我更倾向于使用 Hatch 作为我的Python环境管理器。Hatch的一个挑战是它把每个项目的虚拟环境放在一个不太显眼的系统目录中。独立工作时,我已经习惯在大多数Python命令前面加上 hatch run,对我来说这没问题。

然而在Claude Code中工作时,工具本身想要运行核心诊断工具,如 ruffpyrightpytest。它似乎无法自己找到Hatch的环境。我写了一个规则,告诉它 hatch env find 会给出虚拟环境目录,它可以从那里 activate 它,但Claude似乎把这理解得过于字面化,现在每条命令它都会报告

Bash command

  source "$(hatch env find)/bin/activate" && ruff check --fix file.py 2>&1

'source' evaluates arguments as shell code

Do you want to proceed?

我其实并不想压制这个检查,但也不想在我的 .claude/settings.json 中分别再包含 Bash(pytest *)Bash(hatch run pytest *)

有没有更好的方式来设置这个,使其既能管理每个项目(每个工作区)隔离的虚拟环境,又能避免并非完全可信的shell模式?

解决方案

你可以创建一个 rules file ,在Claude Code触碰Python代码时给予它额外的指令。在 ~/.claude/rules/hatch-environment.md 中,你可以放入带有特殊前言的Markdown文本,指示需要应用到哪些文件。这其中可以包含诸如以下的文本:

---
paths:
  - "**/*.py"
  - "**/pyproject.toml"
---
# Hatch Environment Management

## Running Commands

Use `hatch run` to execute commands inside the environment.  For example:

```bash
hatch run pytest tests/
hatch run ruff check
hatch run pyright

你也可以运行 `claude`,请它为你创建这个文件。如果你具备编写技能的能力(例如在 [Superpowers] 中捆绑的写作技能),你可以让它写一个实现这个功能的技能,然后将该技能移动到 `rules` 目录并修改前言。我的实际文件还包含关于查找和创建虚拟环境的更多细节,并注明我与同事之间在工具偏好上的差异。

使用此设置时,你还需要确保对以 `hatch run` 为前缀的常规命令给予权限。因此 `~/.claude/settings.json` 将部分地写成:

```json
{
  "permissions": {
    "allow": [
      "Bash(hatch run pyright *)",
      "Bash(hatch run pytest *)",
      "Bash(hatch run ruff *)",
      ...
    ]
  }
}

你可能不想给一个完全开放式的 hatch run * 的权限。我的问题里我也曾说不想这样做,但如果你果断地对Claude说“真的用Hatch”,那么它就不会到处尝试其他工具,而我的工作流程似乎只需要对这几个特定工具给予权限。(尽管Claude喜欢运行临时脚本来试试,但我也不想对 hatch run python 授予开放式的权限。)

似乎不太可能只激活一次Hatch环境并在其中运行命令。在哪个普通shell里,你原则上可以像对待其他虚拟环境一样 . "$(hatch env find)/bin/activate"。不过在Claude Code中,设定的环境变量不会在跨越 Bash(...) 的工具调用之间持续存在。

有评论指出,这也很实用地可以 hatch run claude;Claude还建议在你切换到该目录时使用像 direnv 这样的工具来激活虚拟环境。这两种方法都清晰、简单,且对单个仓库来说都能很好地工作。在我的环境中,我是从一个包含若干仓库的父目录运行,该目录下有几个仓库被检出,而在子目录中运行的代理未必能自动找到正确的Python虚拟环境。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章