2016年7月25日 星期一

Python_Note17

.py to exe

Python的.py檔無法在未安裝Python編譯器的系統上直接執行,因此需要打包轉成exe檔。Python有許多.py檔轉成exe檔的套件,包刮py2exe、cx_Freeze、Pytinstaller,前兩個我試過各種一般正常教學方式安裝,都無法正常使用,可能是python3.x版不支援關係、也可能是中文編碼問題,總之就是轉不成功。Pyinstaller在win7 + Pyyhon3.5 + PyCharm下是可以成功轉檔的。

Pyinstaller

Pyinstaller的安裝也並非一次就成功 [ 2016/07/14],在cmd下執行 pip install pyinstaller 會無法順利安裝,出現 UnicodeDecodeError: 'cp950' codec can't decode byte 0xe2 in position 208687,似乎是big5編碼環境造成的,因此必須安裝開發版本,安裝方法如下:
1. Pyinstaller的官方網站 http://www.pyinstaller.org/,找下方藍色背景的開發版本,並右鍵選複製連結網址,https://github.com/pyinstaller/pyinstaller/tarball/develop

2.然後到cmd下執行
pip install https://github.com/pyinstaller/pyinstaller/tarball/develop
即可安裝網址提供的開發版本,就能順利安裝了。 (Python_pip 介紹)

PyInstaller 會分析 code,然後收集需要的 module 和 library 甚至包括 Python interpreter
和原始碼打包成一個文件夾或單一可執行文件(exe檔)。

使用方式:
執行 pyinstaller myscript.py

執行以上命令,PyInstaller 會做以下事情:
  1. 建立一個 myscript.spec
  2. 建立一個 build 資料夾
  3. 建立一些 log & 工作檔案在 build 中
  4. 建立一個 dist 資料夾 (此資料夾用來分享給別人)
  5. 建立執行檔在 dist 資料夾
簡單示範:
  1. 在要轉成exe的.py檔的資料夾下,執行 pyinstaller myscript.py 。
  2. 執行完後會在同個資料夾下產生[build] 跟 [dist] 資料夾,exe執行檔以及dll等各種檔案會存在 [dist] 資料夾中同myscript檔名資料夾內。
  3. 整個資料夾打包給別人,要使用時就執行myscript.exe檔即可。
...











倘若想要打包成只有exe檔等情況,也可以使用一些參數來達成。例如打包成一個exe檔案只要將執行命令改成pyinstaller myscript.py -F

參數

-h--helpshow this help message and exit
-v--versionShow program version info and exit.
--distpathDIRWhere to put the bundled app (default: ./dist)
--workpath WORKPATH
Where to put all the temporary work files, .log, .pyz and etc. (default: ./build)
-y--noconfirm
Replace output directory (default: SPECPATH/dist/SPECNAME) without asking for confirmation
--upx-dir UPX_DIR
Path to UPX utility (default: search the execution path)
-a--asciiDo not include unicode encoding support (default: included if available)
--cleanClean PyInstaller cache and remove temporary files before building.
--log-level LEVEL
Amount of detail in build-time console messages. LEVEL may be one of DEBUG, INFO, WARN, ERROR, CRITICAL (default: INFO).
-D--onedirCreate a one-folder bundle containing an executable (default)
-F--onefileCreate a one-file bundled executable.
--specpathDIRFolder to store the generated spec file (default: current directory)
-n NAME--name NAME
Name to assign to the bundled app and spec file (default: first script’s basename)



沒有留言:

張貼留言