1. 程式人生 > >Python 使用pyinstaller將py檔案釋出成exe程式

Python 使用pyinstaller將py檔案釋出成exe程式

一. Pyinstaller簡介

Python是一個指令碼語言,被直譯器解釋執行。它的釋出方式:

  • .py檔案:對於開源專案或者原始碼沒那麼重要的,直接提供原始碼,需要使用者自行安裝Python並且安裝依賴的各種庫。(Python官方的各種安裝包就是這樣做的)

  • .pyc檔案:有些公司或個人因為機密或者各種原因,不願意原始碼被執行者看到,可以使用pyc檔案釋出,pyc檔案是Python直譯器可以識別的二進位制碼,故釋出後也是跨平臺的,需要使用者安裝相應版本的Python和依賴庫。

  • 可執行檔案:對於非碼農使用者或者一些小白使用者,你讓他裝個Python同時還要折騰一堆依賴庫,那簡直是個災難。對於此類使用者,最簡單的方式就是提供一個可執行檔案,只需要把用法告訴Ta即可。比較麻煩的是需要針對不同平臺需要打包不同的可執行檔案(Windows,Linux,Mac,...)。

本文主要就是介紹最後一種方式,.py和.pyc都比較簡單,Python本身就可以搞定。將Python指令碼打包成可執行檔案有多種方式,本文重點介紹PyInstaller,

 

PyInstaller的原理簡介

PyInstaller其實就是把python解析器和你自己的指令碼打包成一個可執行的檔案,和編譯成真正的機器碼完全是兩回事,所以千萬不要指望成打包成一個可執行檔案會提高執行效率,相反可能會降低執行效率,好處就是在執行者的機器上不用安裝python和你的指令碼依賴的庫。在Linux作業系統下,它主要用的binutil工具包裡面的lddobjdump命令。

PyInstaller輸入你指定的的指令碼,首先分析指令碼所依賴的其他指令碼,然後去查詢,複製,把所有相關的指令碼收集起來,包括Python解析器,然後把這些檔案放在一個目錄下,或者打包進一個可執行檔案裡面。

可以直接釋出輸出的整個資料夾裡面的檔案,或者生成的可執行檔案。你只需要告訴使用者,你的應用App是自我包含的,不需要安裝其他包,或某個版本的Python,就可以直接運行了。

需要注意的是,PyInstaller打包的執行檔案,只能在和打包機器系統同樣的環境下。也就是說,不具備可移植性,若需要在不同系統上執行,就必須針對該平臺進行打包。

 

pyinstaller將Python指令碼打包成可執行程式,使在沒有Python環境的機器上執行

可執行在Windows,Mac和Linux作業系統下。
但它不是跨編譯的,也就是說在Windows下用PyInstaller生成的exe只能執行在Windows下,在Linux下生成的只能執行在Linux下。

 

二.pyinstaller在windows下的安裝

 

使用命令pip install pyinstaller即可
在windows下,pyinstaller需要PyWin32的支援。當用pip安裝pyinstaller時未找到PyWin32,會自動安裝pypiwin32

       

 

出現Successfully installed pyinstaller-3.1.1 pypiwin32-219即表示安裝成功

 

三.打包

 

打包的app裡並不包含任何原始碼,但將指令碼的.pyc檔案打包了。

基本語法:
pyinstaller options myscript.py

常用引數:

-F    製作獨立的可執行程式
-D    製作出的檔案存放在同一個資料夾下(預設值)

-K    包含TCL/TK(對於使用了TK的,最好加上這個選項,否則在未安裝TK的電腦上無法執行)
-w     製作視窗程式
-c    製作命令列程式(預設)
-X    製作使用UPX壓縮過的可執行程式(推薦使用這個選項,需要下載UPX包,解壓後upx.exe放在Python(非PyInstaller)安裝目錄下,下載upx308w.zip

-o DIR  指定輸出SPEC檔案路徑(這也決定了最後輸出的exe檔案路徑)
--icon=[ICO檔案路徑] 指定程式圖示
-v [指定檔案] 指定程式版本資訊
-n [指定程式名] 指定程式名稱

可以使用 pyinstaller -h 來檢視引數說明

樣例:

將cmd的目錄切換至(命令:cd 檔案路徑(注意空格))需要打包的py檔案目錄下:

  並輸入程式碼,格式為使用命令:pyinstaller -F 檔名(帶字尾py):
pyinstaller -F test.py

回車後,程式碼迅速操作,直到操作結束。

    返回目標檔案目錄,

 

打包好的exe檔案,在同目錄的dist檔案中, exe檔案已生成:

  由此,py檔案打包好為exe檔案。   pyinstaller 改變生成exe程式的圖示的樣例:
pyinstaller -F --icon=my.ico test.py
my.ico 是一個圖示名,和當前的test.py檔案在同一個目錄下