前言
這篇是我在幫我弟解作業環境問題時,意外發現,
普遍網路上的解法都「比較少提到」卻「非常重要的」python 環境問題
因為這邊我只淺談,但會把重點都講清楚,
在我們的電腦裡面,會有很多的 python 環境,
而初學程式的人大部分應該都沒有對 python 環境有概念,
而且會「誤以為是自己程式碼打錯了!」,
頓時就覺得程式太難了… 失去了信心,這其實是很可惜的!
但學校往往也不會教這東西,因為這不是教學的重點,
這概念有點像,我要你學 photoshop,可是你處在一個連 photoshop 都裝不起來的狀況,
這不能算是學生的問題,卻難以算上是「學校應該要教的重點部分」,
因此此類大部分問題,最後都會淪為「助教來協助處理同學們的 python 環境」。
而比較害羞的學生,可能誤以為自己學不會程式,太難了,也沒機會找助教詢問,
照上面的比喻來說,連 photoshop 都還沒開始學,就因為 ps 裝不起來放棄了,這真的很可惜。
問題內容
執行 python 時出現以下錯誤
ModuleNotFoundError:
No module named 'cv2'
常見解法
pip install opencv-python
結果還是解決不了? why?
難道網路上常見的解法都錯了嗎?
其實他們都是對的,但這個問題是來自於「沒有對 python 環境有概念」,
導致「以為自己下的指令有用,其實沒有下在正確的地方」
python 環境
每一台電腦裡面都可能有非常多的 python 環境,
基本的電腦開啟終端機後,可能都會預設有裝一個,
這時如果我們看一些教學,可能誤打誤撞去裝了 anaconda 之類的 python 環境管理工具,
在不是清楚自己在幹嘛,而只是單純「照著教學做」,
就會根本不知道自己會在哪個「python 環境裡面」,
這會有什麼問題呢? 問題可大了
一個對於「python 環境」的比喻
假設 A 環境才會有 A 道具,B 環境才會有 B 道具
我們想在 A 環境拿到 B 道具,想也知道這是不可能的。
但我們上面卻就在做類似這樣的事情,
我們安裝 (pip install) OpenCV 這個工具在「anaconda 環境」,
卻嘗試在「系統的 python 環境」拿這個工具,怎麼可能拿的到呢?
這也是為什麼,明明網路上的解法寫的都一樣,但你照著做不見得行得通的原因。
沒錯,我弟就是照著老師的教學,老實的裝了 anaconda,
也很認真的去網路上找到了上面的解法,結果搞了半天解不掉問題,
甚至一度以為是自己的錯。但明明就不是,而且這還是應學習之外的東西。
可以透過 VScode 快速檢查自己電腦裡面的「python 環境」
其實不一定要 VScode,這只是我個人習慣,
我們的第一步,就是要先確認自己的電腦上可能有哪些「python 環境」
我們先任意建立一個「.py」的檔案並儲存,
這時候 VScode 會偵測到這是個 python 的程式,
我們可以按右下角,「選擇直譯器」、或有可能是顯示「python 版本號」,
點擊後,我們就可以看到目前系統所有的「python 環境」。
點擊後,我們就可以看到目前系統可以選擇的「所有 python 環境」,
就如同我上圖中顯示了我的很多「python 環境」,
也分別安裝在我電腦中的不同位置,
讀者 python 環境數量與我不同是正常的,因為這些都是我自己建立的。
我們稍微觀察一下就會發現一些事情:
- global 顯示的路徑,與目前星星的路徑是一樣的。也都是 python 3.7.3,這就表示系統預設的「python 環境路徑」。
- 接下來有很多 「~/opt/anaconda3/…」 開頭的,這都是透過「anaconda 這套 python 環境管理工具」所產生的 python 環境。
- 承上,我們再特別留意 base,這個是指「anaconda 中,最基本的環境」
我們接下來把上面圖示一下。
用圖示的方式講解 python 環境
對照上圖,我的 python 環境在我電腦中大概長這樣
看來我電腦裡面真的有很多「python 環境」呢,
那麼問題來了,「請問你是把 pip install 裝到哪一個 python 環境呢?」
如果答不出來也沒關係,這是幾乎每一位 python 初學者一定有碰過的問題,
而且也不知道自己在幹嘛,可能就是照著做,
而且通常學校、甚至公司也不太會教,因為也不知道該怎麼教…
所以現在讀者應該能比較清楚了,你下的 pip install 會沒有用,
不是指令錯了,是因為裝錯了環境,
你可以預設「每一個 python 環境預設都是各自獨立」的,
裝錯了,就是找不到,就是會跳錯。
該怎麼知道 python 環境 與 如何進入正確的 「python 環境」
這裡方法有太多種,我只想講一種我會比較推薦初學者使用的方式,
畢竟這篇文章應該比較偏初學者向?
終端機那些我覺得操作可能就比較複雜了,
需要的人,應該也有能力自行另外找到資源學習了。
首先一樣回到我們的 VScode,在剛剛的所跳出的所有環境選項中,
直接選擇你想要的「python 環境」,
選哪個環境比較好… 這可以再細談,
但注意: VScode 預設的「建議」我覺得並不是個「好建議」,
可以的話我會建議選下圖紅色的 (如果有的話) 環境,
因為「下圖紅色的環境,我們之後如果不需要開發的時候,砍掉是最不痛不癢的」,
你可以想想如果裝在系統,之後要砍藍色的某一個東西,萬一不小心砍掉,
但有某某程式要用,那個程式就不能用了,
因此如果可以的話,我非常不建議安裝在藍色的地方。
要刪除會有潛在的麻煩,但一直裝可能就會很佔空間。
選擇 python 環境後,安裝指定的套件
這邊選好 python 環境後,我們點擊 VScode 上方,
「終端機 -> 新增終端機」,
VScode 很自動的會幫我們自動載入進去那個環境,
這個時候下 pip install 才是裝在正確的 python 環境裡面。
然後看到下面開啟的終端機,(可能會預先跑一些開啟 python 環境的指令,是正常的),
我們就可以輸入「pip install opencv-python」,
才是把工具裝在「正確的 python 環境」裡面哦!
這裡也要注意,以後每次開 VScode,都要記得要用一樣的方式「回到這個 python 環境」跑 python,
不然就又是在「沒有 A 工具的環境,嘗試做 A 工具才能做的事」
測試
這邊可以很簡單的測試,
安裝好後,輸入 import cv2,能夠通過就是安裝完成了。
預防萬一,怕有人不知道怎麼退出 python 模式,
可以輸入「exit()」或快速鍵輸入「ctrl + z」,就可以退出囉!
Reference
me