在 MacOS M1 的機器上, 系統預設的 python 不包含 tkinter , 因此使用 homebrew 來安裝 tcl-tk 套件.
但是在使用 pyvenv 環境時, 系統不會將 tcl-tk 的 library 拷貝到 venv 的 lib 中.
以至於 py2app 在包裝時, 會遺漏 tcl-tk 的 library. 造成執行時會找不到 init.tcl 的問題
因此, 必須手動將 下列的 tcl-tk 的library 拷貝到 path-to-venv/lib 中.
cd path-to-venv/lib
cp -a /opt/homebrew/Cellar/tcl-tk/8.6.11/lib/tcl8 .
cp -a /opt/homebrew/Cellar/tcl-tk/8.6.11/lib/tcl8.6 .
cp -a /opt/homebrew/Cellar/tcl-tk/8.6.11/lib/tk8.6 .
若是使用 MacOS x86機器, 這時 homebrew 的路徑需要改成如下:
cd path-to-venv/lib
cp -a /usr/local/Cellar/tcl-tk/8.6.11_1/lib/tcl8 .
cp -a /usr/local/Cellar/tcl-tk/8.6.11_1/lib/tcl8.6 .
cp -a /usr/local/Cellar/tcl-tk/8.6.11_1/lib/tk8.6 .
!!注意!!
由於MacOS 本身有也 tcl-tk library, 位於下面路徑中. 但是我們是使用 homebrew 安裝的tcl-tk, 因此不能拷貝下面的 tcl-tk library 到 venv 的環境.
不然會造成 app 出現另一個錯誤訊息(tcl 版本不合的問題).
/Library/Frameworks/Python.framework/Versions/3.7/lib/tcl8
/Library/Frameworks/Python.framework/Versions/3.7/lib/tcl8.6
/Library/Frameworks/Python.framework/Versions/3.7/lib/tk8.6