分類

展開全部 | 收合全部

分類

展開全部 | 收合全部

【Python 環境管理 #3】淺談 python 環境 與 python OpenCV 問題解決:No module named ‘cv2’

前言

這篇是我在幫我弟解作業環境問題時,意外發現,
普遍網路上的解法都「比較少提到」卻「非常重要的」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

⭐Python 基礎用法 相關文章整理⭐:
1.【Python】python list 清除, 移除內容元素 remove, pop, del, clear相關用法整理 sample code (內含範例程式碼)
2.【Python】寫模組 module、package 總整理 Importing files from different folder
3.【Python】python assert (斷言) 用法 sample code (內含範例程式碼)
4.【Python】python 一行 if else 語法 (one line if else) sample code (內含範例程式碼)
5.【Python】lambda 與 def function 使用方法與比較整理(內含範例程式碼)
6.【Python】python map 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
7.【Python】python zip 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
⭐Python 字串處理 相關文章整理⭐:
1.【Python】python print 變數的值 & 變數名稱 方法總整理
2.【Python】python string format str.format 總整理
⭐Python 檔案處理 相關文章整理⭐:
1.【Python】python 開關檔範例 與 程式模板 with open / file open sample code
2.【Python】取出檔案名稱 (含副檔名、不含副檔名) os path basename split 取出 檔名 路徑 不要副檔名 sample code
3.【Python】在 python 中利用 os.chmod 更改檔案的權限 chmod 777
4.【Python】利用 shutil 來複製檔案 shutil copy file
5.【Python】python 建立資料夾範例 mkdir os.makedirs() sample code
6.【Python】python 移除資料夾範例 rmdir shutil.rmtree() sample code
7.【Python】確認檔案是否存在 os.path.isfile / 確認資料夾是否存在 os.path.isdir sample code is folder / file exist
⭐Python 系統偵測 相關文章整理⭐:
1.【Python】python pyinotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼)
2.【Python】python 利用 argparse 使程式執行時可帶參數 (內附範例程式碼) sample code
⭐Python 平行運算 相關文章整理⭐:
1.【Python】threading – 建立多執行緒來執行程式 (內含範例程式碼) sample code
2.【Python】multiprocessing – 01 | 用多核心來執行程式 (內含範例程式碼) sample code
3.【Python】multiprocessing – 02 | pool, map, apply_async – 用多核心來執行程式並取得結果 (內含範例程式碼) sample code
4.【Python】python thread multiprocess 比較總整理
5.【Python】python pooling multiprocess – 用多核心來執行程式 sample code (內含範例程式碼)
⭐Python 測試程式 相關文章整理⭐:
1.【Python】python 測試程式 – 利用 doctest 測試 python testcase 的優雅寫法,適用於 leetcode (doctest in function,搭配 function 的用法)
2.【Leetcode】python – 利用 doctest 測試 leetcode python testcase 的優雅寫法 (doctest in class,搭配 class 的用法)
⭐Python Chatbot 相關文章整理⭐:
1.【Chatbot】(全圖文說明) LINE Developers bot 機器人註冊與設定
2.【Chatbot】(全圖文說明) ngrok 本地伺服器設定方法 – LINE bot local server
3.【Chatbot】Dialogflow API 串接 python 的方法 (內含範例程式碼)
4.【Chatbot】[講義分享] 手把手實作line機器人 (linebot API 運用)
⭐Python Google Colab (Colaboratory) 相關文章整理⭐:
1.【Colab】Python colab 上傳檔案的方法 (內含範例程式碼) upload files
2.【Colab】Python colab 連接 google 雲端硬碟取用資料 (內含範例程式碼) mount google drive
⭐Python 其他筆記 相關文章整理⭐:
1.【Python】anaconda 更新 (upgrade) python 3.8 版本筆記
2.【Sublime】Sublime 將縮排 “tab” 改成 4格空白 的方法 (圖文說明) sublime indent 4 spaces
3.【Sublime】Python 縮排小技巧 (很爛但實用) 快速將 tab 改成「4格空白」的方法
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps
Howard Weng
Howard Weng

我是 Howard Weng,很多人叫我嗡嗡。這個網站放了我的各種筆記。希望這些筆記也能順便幫助到有需要的人們!如果文章有幫助到你的話,歡迎幫我點讚哦!
另外,因為定位是「個人的隨手筆記」,有些文章內容「⚠️可能我理解有誤⚠️」或「?只寫到一半?」,如果有發現這樣的情況,歡迎在該文章的最下面留言提醒我!我會儘快修正或補上!感謝大家的建議與幫忙,讓網站能變得更好?

文章: 866

2 則留言

  1. 您好,最近認真開始接觸python,也是剛換到mac系統,所以很多事情還不了解,之前真的很常遇到No module named…的問題,然後就一直上網查怎麼解決,不知不覺就照著網站說的安裝了各式各樣的東西與環境,看到您這篇文章真的讓我覺得跟這篇文章相見恨晚,讓我有了對環境建置的概念。
    您在文章有提到安裝太多可能會占空間,但刪除又有可能會有其他麻煩,這邊想請教真的不建議刪除嗎? 我怕佔了很多空間,您有什麼建議的方式呢? 謝謝!

    • Hi Tony~ 感謝你喜歡我的文章XD
      有相對安全的方式就是透過 pip uninstall / conda remove 進行反安裝就好
      大部分套件其實都不會佔太多空間 (都是文字檔而已),實際上我很多到後來放著不動比較多

      有些像是影像處理、機器學習類的,那可能空間就會稍微大一些
      其實有個 256G 的電腦也還是滿夠用的,不會到太常清
      另外環境管理還有一個比較重要的目的,能讓自己的程式比較快速重現於別人的電腦上,這個我在這篇文章就比較沒有提到XD

★留個言吧!內容有誤或想要補充也歡迎與我討論!