科技 · 實用指南
Poetry 選錯 Python?先證明解譯器與環境,再決定是否重建
比較 shell、Poetry 專案環境及執行程序的 sys.executable、prefix 與 base_prefix;再核對專案限制和設定範圍,選擇最小修復。

終端提示看似正確,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 與測試,保存前後路徑。
