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