本文目的:了解如何安裝 python 與相關模組,並且知道設定開發環境的優勢
本專欄的目的是協助讀者使用 Python 做出符合自身需求的資料整理程式,例如工程師製作整理 wafer 檢測數據的工具、店家老闆製作庫存管理工具等。一個程式組成不外乎 UI 、核心、以及設定驗證,因此我實際編寫工具時主要會使用下列 Python 模組。
我初學時就直接學 PySide6,而不是原生的 tkinter。當時只想著 PySide6 有圖形化的 UI 設計工具,可以讓我用拖拉方式設定介面,不用再盯著 code 思考"所以UI到底長什麼樣子“等視覺化問題。
但是 PySide6 比起 tkinter 的以下幾點,可以讓我們的工具更好維護、更容易修改與擴充
Pyside6 的事件綁定 (Event Binding) 很靈活: PySide6 的 UI 部件與對應 function,連接方式就像電台與收音機,電台發射訊號後不會管收音機怎麼收,收音機也可以隨時收聽或關閉。
因此 Pyside6 可以做到一對多連接、斷開連接後重新連接等功能。
Pyside6 的事件綁定機制為信號與槽 (Signal & Slot),透過
connect指令指示某物件的訊號是由哪個function接收,物件與function不知道彼此存在
PySide6 可以讓程式碼很乾淨: 由於 PySide6 的事件綁定機制是透過第三方connect,因此可以分開檔案建立 UI 的部件、function,然後再用一個檔案設定彼此綁定的方式。這樣的方式讓UI、function都是獨立的,因此也可以依照需求直接更換對應物件或function。
這種設計模式稱為 Model-View-Controller (MVC)
Pyside6 的物件功能多元: 好用的資料工具一定要讓使用者可以輸入自己的設定,但又要避免使用者打錯內容。PySide6 可以做出表格中有下拉式選單等專業功能。
使用 Python 做資料處理一定會想到雙熊 (Pandas & Polars),Pandas 是非常知名、歷史悠久的模組,Polars 則是以處理速度見長,本專欄會以 Pandas 作為資料處理核心。
以我們的背景 (非資工背景、自學的半導體工程師),Pandas 會是較穩健的選擇,原因如下:
Pandas 有非常多的網路資源,如教學或是 Stack Overflow上大量的討論
Pandas 的儲存格式,與繪圖模組 (Matplotlib 等) 的支援性高,可以很輕易的畫成圖
既然是資料處理工具,就一定會有讓使用者輸入所需設定的地方。而大家在使用工廠內一些程式時,一定遇過上下值相反、Wafer ID 輸入格式錯誤、弄錯 SPEC 單位等人為錯誤。這些問題若導致程式 crash 頂多關掉重開,但若沒發現產出異常而拿去報告或導致異常流出就要出大事。
也因此若能在源頭做好管理,可以避免 user (也是我們) 在實際使用上的麻煩。Pydantic 在資料驗證上是非常多功能的模組,它可以做到:
內容驗證: 例如我們可以事先設定一個容許清單,當 user 輸入不在清單內的值時會發出通知
格式驗證: 例如限制 wafer ID 輸入時第一個字母一定是大寫、最後2碼一定是00等
相對性驗證: 例如最小值,一定是小於最大值
條件驗證: 例如平時 user 只需輸入一個觀察項;但 user 在程式中若指定某些計算方式時,強制要求設定兩個觀察項
dataclasses: 讓程式內資料傳遞與輸出更簡易的模組
pathlib: 管理檔案路徑的模組。將檔案路徑使用Path管理而不是string,可以有容易拆解與加入路徑、標示更清晰等效果
Matplotlib: 知名繪圖模組,與 Pandas 有相當優秀的支援
json: json 是一種很常用的資料儲存格式,此模組可以讀取/ 寫入 json,我通常拿來儲存使用者設定
Jupyter: 可以讓 Python 分段單獨執行之模組,對於驗證 prototype 、或是初學者想逐步確認輸出上非常好用
如果是公司電腦,通常都有安裝軟體的限制,因此請開申請單讓 IT 來裝。
安裝 Python 通常有直接官網下載檔案,以及安裝 Anaconda 兩種方式。雖然 Anaconda 可以一次安裝 Python 與資料科學常用模組,且管理模組時有圖像化界面可用。但 Anaconda 很肥大且商用環境需要付費,因此建議就算是在家使用也是選擇官網下載檔案安裝。
安裝方式本文就不說明,大家可以參考相關網路教學。
我選用的是 microsoft 的 Visual Studio Code (後續簡稱VS code),因為它可在公司行號免費使用、marketplace 安裝各種擴充、支援 Jupyter 等功能。
VS code 安裝完成後,還需要去 marketplace 安裝 Python 擴充才能正常使用。
另外推薦幾個我常用的擴充:
Jupyter: 安裝後就可以在 VS code 內使用 Jupyter,另外若要在 VS code 觀看資料還需要再安裝 Data Wranger
建立 .ipynb 檔案的方式為在 VS code 內按下
CTRL + win + ALT + N,然後點選Jupyter Notebook
Markdown Preview Mermaid Support: 可以用markdown-mermaid語法繪製流程圖等圖片
autopep8: 安裝此模組後,可以在儲存檔案時修正程式排版,讓程式碼符合 PEP 8 規範。另外此模組安裝後需要設定才會生效,設定方式請參考網路教學
Todo tree: 能在程式碼中標示 TODO、BUG,且在左側選單產生超連結之模組
以下皆以 windows 環境做說明
建立虛擬環境的步驟
開啟想要建立虛擬環境的資料夾,並在上面的網址列輸入cmd,就會看到 cmd 的黑畫面,且 cmd 的當前路徑直接就在需要建立環境的路徑
在cmd輸入以下指令: python -m venv .venv,便會開始建立虛擬環境,並在當前路徑建立一名為.venv的資料夾
.venv資料夾就是這個專案的虛擬環境,另外強烈建議每個專案都要建立虛擬環境
安裝模組
將cmd的工作路徑移動到 ../.venv/Scripts ,.. 是專案的資料夾
輸入activate啟用虛擬環境,啟用後cmd指令列開頭會有(.venv)字樣,如下圖

輸入pip install (模組名),即可安裝所需之模組
輸出已安裝模組清單,並在新環境重新安裝
輸出模組清單: 當虛擬環境啟用後,輸入以下指令,即會在當前資料夾看到 requirements.txt 檔案
pip freeze > requirements.txt
requirements.txt 點開後內容如下,裡面記錄著這個虛擬環境下的所有已安裝模組以及對應的版本

在新環境中安裝模組: 建立新環境後,將 requirements.txt 放在 ../.venv/Scripts ,並在cmd中輸入以下指令,即可在新環境中安裝與先前環境相同的模組與版本
pip install -r requirements.txt
其實當開啟cmd後,直接輸入 python -m pip install (某模組) 就可以在全域環境 (Global Environment)中安裝模組了,並且只要沒有套用虛擬環境的專案,都可以讀取到全域環境。
這樣子感覺很方便,還不用有activate的過程。但我強烈建議要為每個專案建立自己的環境,原因如下:
最後的執行檔 (exe) 會很大: 我們最終的目的是將 code 打包成 exe 檔供自己或同事使用。打包工具在打包 exe 時,會將環境中所有模組都打包進去。若環境中充斥著這專案不用的模組,會導致最後 exe 檔異常的大,以及開啟速度很慢等問題。
模組之間可能會有衝突: 例如若在同一環境中安裝 PySide6 與 PyQt5,這兩個都是 Python 中 Qt(圖形使用介面框架) 相關模組,在打包 exe 檔時會發生衝突。
避免模組更新後,舊專案無法正常運作: 某些模組在更新後,會不支援舊的寫法。例如 Pandas 3.0 後不支援 Pandas 2.X 可用的”修改切片資料”寫法,這樣當Pandas 更新至 3.0 後,某些舊模組會發生異常。
了解如何用 pandas 清理很雜亂的 wafer 點測資料