iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
佛心分享-IT 人自學之術

It Works on My Machine:30 天從踩雷學會工程事故調查系列 第 6

Day 06|踩雷:IDE 能跑、Terminal 不能跑,兩邊都說自己沒問題

  • 分享至 

  • xImage
  •  

本篇是故事二的「踩雷」篇。

本篇要回答:同一台電腦、同一份程式碼,為什麼會產生互相矛盾的測試結果?

當時發生了什麼

本機測試卡關了好一陣子,症狀清單長這樣:套件明明已經安裝,程式卻說找不到;IDE 按下執行鍵一切正常,切到 OS Terminal 跑同一支測試卻失敗;某幾次情況相反——Terminal 通過,IDE 的結果不一樣。同一台電腦、同一份原始碼,兩套互相矛盾的結果。

(本故事依親身經驗去識別化重建:IDE 與作業系統名稱略去,錯誤訊息細節以示意呈現;可實際執行的指令與行為皆經過驗證。)

最消耗的不是錯誤本身,而是矛盾:每一個工具都能出示自己的不在場證明。IDE 說我能跑,pip 說我裝好了,Terminal 說我找不到模組。當所有人都沒問題,剩下的解釋就只能往玄學走——重開機、重裝套件、換個資料夾再試一次。

我原本怎麼判斷

當時輪流懷疑了套件(是不是壞了)、IDE(是不是快取)、作業系統(是不是權限),甚至懷疑程式碼自己(是不是有隱藏字元)。唯獨沒有懷疑「執行環境」這個概念,因為在我當時的世界觀裡,「我的電腦」就是一個環境——單數。

背後的執行假設是:同一台電腦等於同一個 Python。這個假設錯得很安靜,它自己不會報錯,只會讓其他所有證據變得無法解釋。

我怎麼查證或重現

止住玄學的第一步不是修,而是要求兩邊各自報上身分。在 IDE 與 Terminal 各跑一次:

import sys
print(sys.executable)

兩邊印出的路徑不一樣。問題在這一刻第一次有了形狀:不是程式碼時好時壞,是根本有兩個 Python 在輪班。

區分證據等級。已確認事實:兩邊的 interpreter 路徑不同。合理推論:套件只裝進了其中一個環境,所以「已安裝」與「找不到」同時為真。尚未排除:兩個環境的 Python 與套件版本差異、測試命令與工作目錄是否也不同——這些留給後面幾天逐一採證。

今天留下什麼方法

留下一個把玄學變回工程的起手式:

在懷疑任何一方說謊之前,先讓每一方報出自己的 sys.executable。

本篇結論:

同一份程式碼沒有同時活在兩個世界;真正不同的是執行它的 Python、套件與環境設定。

下一篇(Day 07)把「報身分」擴充成完整的環境採證清單:你說的 Python,到底是哪一個 Python?


上一篇
Day 05|內化:沒有定義結果,技術細節只是在替空白需求單上色
下一篇
Day 07|查證:你說的 Python,到底是哪一個 Python?
系列文
It Works on My Machine:30 天從踩雷學會工程事故調查11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言