Watch at Ease看见世界,读懂生活。

科技 · 实用指南

Poetry 选错 Python?先证明解释器和环境,再决定是否重建

对比 shell、Poetry 项目环境以及运行进程的 sys.executable、prefix 与 base_prefix;再核对项目约束和配置作用域,选择最小修复。

开发者在笔记本上比较三个匿名解释器环境的原创插图。
原创插画:替换环境之前,先比较 shell、Poetry 环境与运行时证据。 Watch at Ease

终端提示符看似正确,Poetry 仍可能选中缓存环境、已激活环境或安装 Poetry 时的解释器。安全做法是先证明每一层的路径,再只改真正出错的那一层。

先冻结错配证据

不要一开始就删除 .venv。记录 shell 解析到的 Python、Poetry 环境路径和解释器,以及 poetry run 内部的 sys.executable、sys.prefix、sys.base_prefix。路径一旦不同,就能判断问题来自 shell、Poetry 绑定还是实际启动进程。

把三组路径当成不同证据

shell 的 python 说明 PATH 命中了谁;poetry env info --executable 说明项目关联了谁;sys.executable 说明进程实际启动了谁。sys.prefix 与 sys.base_prefix 可判断是否位于虚拟环境及其基础解释器。VIRTUAL_ENV 不是决定性证据。

先核对项目版本约束

查看 requires-python 或 Poetry 的 Python 约束,并用候选解释器的准确版本核对。Poetry 不会自动提供所有 Python 版本。确认兼容后,可用完整路径或 poetry env use 3.12 明确选择;如果系统没有兼容解释器,应先通过正常平台工具安装或暴露它。

审计配置作用域和已有环境

检查 poetry config --list,并关注 virtualenvs.create、virtualenvs.in-project、virtualenvs.path、virtualenvs.use-poetry-python 以及 CI 环境变量。已有缓存环境时,开启 in-project 不会自动迁移到 .venv;先记录旧路径再做改变。

按证据选择最小修复

若只有 shell 路径错误,就修 PATH 或版本管理器;若 Poetry 绑定了错误项目环境,就对已验证解释器执行 env use;若外部激活环境是故意的,要记住 Poetry 检测到它时不会再建一套。CI 与本地不同则逐项比较 PATH、激活环境、配置变量和 poetry run 输出。

复验并保留回滚记录

重复相同命令。Poetry 环境解释器与 poetry run 的 sys.executable 应指向目标环境,sys.prefix 应指向环境目录,sys.base_prefix 应指向基础解释器。再运行最小失败命令、poetry check 和项目测试,并保存前后路径与变更配置。

匿名解释器路径穿过项目目录和虚拟环境边界的原创技术插图。
原创技术插画:活动运行路径、项目环境和基础解释器需要分别证明。 Watch at Ease