hatch env create 失败因未识别 python:需用 pyenv/asdf 正确安装并注册,windows 需确保注册表项;脚本需在 hatch.toml 的 [scripts] 下定义;hatch run 自动管理环境并安装项目,hatch env run 仅执行已有环境;prune 不清理自定义路径环境。

hatch env create 创建失败:找不到 Python 版本
hatch 默认不会自动安装 Python,它只调用系统已有的 python 或按 pyenv、asdf 等工具注册的版本。如果你执行 hatch env create py39 报错 No Python interpreter found for specifier 'py39',大概率是 hatch 根本没看到你装的 Python。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 先运行
hatch env python list,看 hatch 能识别出哪些 Python —— 它不依赖$PATH,而是查pyenv的versions目录、asdf的 shim 路径,或系统/usr/bin下的硬链接 - 如果用
pyenv,确保已执行pyenv install 3.9.18且pyenv global 3.9.18(或至少pyenv local),再试hatch env create - Windows 用户注意:hatch 不识别
py -3.9这类启动器,必须让pyenv或官方安装器把 Python 注册进系统“PythonInstallPath”注册表项,否则 hatch 查不到
hatch.toml 中 [scripts] 定义后不生效
脚本定义在 hatch.toml 里,但运行 hatch run lint 提示 Unknown script 'lint',常见原因是配置位置或格式不对。
实操建议:
立即学习“Python免费学习笔记(深入)”;
-
[scripts]必须放在项目根目录的hatch.toml中,不能放在pyproject.toml里(除非你明确用[tool.hatch.scripts]) - 不要写成
[tool.hatch.scripts]后又在同个文件里写[scripts]—— hatch 只认其中一种,优先级混乱时直接忽略 - 脚本值支持字符串(如
lint = "ruff check .")或数组(如test = ["pytest", "-x", "tests/"]),但不能混用;数组中每个元素必须是纯字符串,不能带&&或管道符 - 如果脚本依赖未安装的包(比如
ruff),hatch 不会自动装,需提前在对应环境中pip install ruff,或改用hatch run --no-project lint让 hatch 在干净环境里装依赖再跑
hatch env run 与 hatch run 的行为差异
这两个命令看起来都“跑东西”,但触发的环境和隔离程度完全不同:一个针对已有环境,一个针对项目本身。
酷纬企业网站管理系统Kuwebs是酷纬信息开发的为企业网站提供解决方案而开发的营销型网站系统。在线留言模块、常见问题模块、友情链接模块。前台采用DIV+CSS,遵循SEO标准。 1.支持中文、英文两种版本,后台可以在不同的环境下编辑中英文。 3.程序和界面分离,提供通用的PHP标准语法字段供前台调用,可以为不同的页面设置不同的风格。 5.支持google地图生成、自定义标题、自定义关键词、自定义描
实操建议:
立即学习“Python免费学习笔记(深入)”;
-
hatch env run myenv -- pytest:在名为myenv的已存在环境中执行pytest,不检查pyproject.toml里的依赖,也不激活项目包(即你的本地代码不会被 import) -
hatch run pytest:先检查[project.optional-dependencies]或[tool.hatch.envs.test.dependencies],创建/复用一个临时环境,安装项目(editable 模式)、测试依赖,再跑pytest—— 这才是开发时该用的方式 - 容易踩坑的是:误用
hatch env run调试脚本,结果发现import mypackage报错 —— 因为那个环境压根没装你的项目
hatch env prune 清不掉旧环境
hatch env prune 默认只清理“由 hatch 自动管理”的环境,手动用 hatch env create --python 3.8 myold 创建的环境会被清理,但通过 hatch env create myold(没指定 Python)创建的、或名字含点号/下划线的,可能被跳过。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 运行
hatch env list,确认待删环境名是否出现在列表中 —— 如果没列出来,prune就不会碰它 - hatch 判断“可清理”的依据是环境路径是否符合其内部命名规则(如
.venv/py39),自定义路径(如--path /tmp/myenv)永远不被prune触及 - 最稳妥的清理方式是直接删目录:
rm -rf $(hatch env show --path myold),再补一句hatch env remove myold同步 hatch 内部记录
环境路径生成逻辑藏得深,不同 hatch 版本对“合法环境名”的判断略有出入,别依赖 prune 做自动化清理,手动删更可控。









