1. 程式人生 > >Python專案打包釋出方法

Python專案打包釋出方法

 

      目前python打包工具有多個,目前比較好用的為pyinstaller,該工具可以支援在window和linux下使用。

      在windows下,大小為幾十K的原始檔打包成exe檔案,可能為幾十兆,原因是把程式所引用的庫檔案也一起打包在一起。

      如下以windows系統為例,分2個步驟,演示如何使用pyinstaller打包。

      第1步:安裝pyinstaller

      安裝pyinstaller之前首先必須有pip,如果還沒有安裝,請用度娘搜尋“python安裝pip”,資源豐富,在此不再介紹,使用pip安裝pyinstaller的命令如下:

pip install pyinstaller

      命令執行的截圖如下,直至安裝完畢,我僅截取了前面部分列印資訊。

      第2步:打包exe檔案

      如果是打包一個py檔案,可以使用“pyinstaller -F 待打包檔名”進行打包,在命令執行完畢後,會在dist目錄下生成一個“待打包檔名.exe”的檔案。如果不使用“-F”引數,則會在dist目錄下生成一個“待打包檔名”的資料夾,該資料夾下包含“待打包檔案.exe”,但是要整個資料夾在一起才能正常工作,因為這個資料夾的功能相當於使用“-F”時的一個“待打包檔案.exe”。

      使用加F引數打包成一個exe檔案的操作截圖如下:

       使用“F”強制打包引數,有時會導致軟體功能執行不正常,僅限於小的範例使用,如果專案有多個py檔案,則建議別再使用“F”引數。

      如果專案有多個檔案,打包時可以把多個檔案列出來,中間用空格隔開即可。

      如果需要修改預設圖示為指定圖示,則使用“-i  圖示檔名”來實現。

      如下為使用多個py檔案和圖示的打包截圖。

      pyinstaller的引數見下表,大家可以在需要時參考。

引數 引數全稱 引數說明

-F

–onefile

打包成單個可執行檔案,如果你的程式碼都寫在一個.py檔案,則可以使用,如果是多個.py檔案,建議不要使用。

-D

–onedir

打包多個檔案,在dist中生成很多依賴檔案,適合以框架形式編寫工具程式碼,該方式程式碼較易於維護。

-K –tk 在部署時包含 TCL/TK。
-a –ascii 不包含編碼.在支援Unicode的python版本上預設包含所有的編碼。
-d –debug

產生debug版本的可執行檔案

-w –windowed,–noconsole 使用Windows子系統執行.當程式啟動的時候不會開啟命令列(僅對Windows有效)
-c –nowindowed,–console

使用控制檯子系統執行(預設)(只對Windows有效)

pyinstaller -c  xxxx.py

pyinstaller xxxx.py --console

-s –strip

可執行檔案和共享庫將run through strip。

注意Cygwin的strip可能使普通的win32 Dll無法使用

-X –upx 如果有UPX安裝(執行Configure.py時檢測),則會壓縮執行檔案(Windows系統中的DLL也會)
-o DIR –out=DIR 指定spec檔案的生成目錄,如果沒有指定,而且當前目錄是PyInstaller的根目錄,會自動建立一個用於輸出(spec和生成的可執行檔案)的目錄.如果沒有指定,而當前目錄不是PyInstaller的根目錄,則會輸出到當前的目錄下。
-p DIR –path=DIR

設定匯入路徑(和使用PYTHONPATH效果相似)。

可以用路徑分割符(Windows使用分號,Linux使用冒號)分割,指定多個目錄.也可以使用多個-p引數來設定多個匯入路徑,讓pyinstaller自己去找程式需要的資源

-i <FILE.ICO> –icon=<FILE.ICO> 將file.ico新增為可執行檔案的資源(只對Windows系統有效),改變程式的圖示  pyinstaller -i  ico路徑 xxxxx.py
–i <FILE.EXE, N> –icon=<FILE.EXE, N>

將file.exe的第n個圖示新增為可執行檔案的資源(只對Windows系統有效)

-v FILE –version=FILE 將verfile作為可執行檔案的版本資源(只對Windows系統有效)
-n NAME –name=NAME

可選的專案(產生的spec的)名字.如果省略,第一個指令碼的主檔名將作為spec的名字

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

如果你喜歡這篇文章,別忘了點贊和評論哦!