在 Mac OS 用 PyInstaller 打包 python

前一篇「在 Linux 用  pyinstaller 打包 python 」成功後,同一個 .spec 設定檔,可以在  Mac 裡重復使用,滿方便的。

另一篇在Mac OS X 裡用 py2app 教學:
py2app – Create standalone Mac OS X applications with Python
https://stackoverflow.max-everyday.com/2017/02/py2app-mac-os-x/


在使用 pyinstaller 之前,很有可能會需要使用到virtualenv。

virtualenv 基礎教學:
http://docs.python-guide.org/en/latest/dev/virtualenvs/

在使用 pyinstaller 之前,可以透過 pip install 來安裝,如果 pip 指令在 macOS 裡顯示無法執行,請服用下面的指令:

sudo easy_install pip

pyinstaller 打包用指令:

 pyinstaller myscript.py

或是用

 pyinstaller myscript.spec –clean

這個 .spec 檔案會在第1次執行 pyinstall myscript.py 之後產生

喜歡產生單一檔案的人,可以使用下面這行來 build

 pyinstaller -F myscript.spec –clean

pyinstall default 是  -D,Create a one-folder bundle containing an executable (default).

如果執行 pyinstaller 出現下面的錯誤訊息:

-bash: pyinstaller: command not found

是因為你的 ./venv/ 目錄裡的「設定值」是錯誤的,發生的原因有2:

  • 交叉使用了 sudo 和一般 user 的權限,一般 user 權限無法修改透過 sudo 指令下載下來的檔案,造成找不到指定的檔案。
  • 修改了原本 ./venv/ 的 parent folder  的 folder name, 造成找不到實際的檔案。

解法就是先用 sudo rm -rf ./venv/ 把目錄完整且乾淨清掉後,重新再來一次即可。


通過pip安裝virtualenv:

$ pip install virtualenv

教學:
http://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html


$ cd your_project_folder
$ virtualenv venv
$ . venv/bin/activate

滿有趣的,提示字元前多了一個(venv)

要退出,就是下 deactivate 即可。

只有第1次需要下 virtualenv venv 之後要進去,就是. venv/bin/activate 就進去了。

滿神奇的,可以不需要下 sudo 就可以透過 pip 安裝所有的程式。virtualenv 裡是乾淨的,所以所有第3方的 package 需要重新 pip install 一次。


打包完成後,執行看看,發現所有的 module name 都消失了,變成 __init__


相關文章

在 Python 虛擬環境中使用 Django
https://stackoverflow.max-everyday.com/2023/02/python-venv-django/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *