Python打包發布神器—Pyinsta
- 2020 年 1 月 6 日
- 筆記
一 前言
在windows平台學習python的過程中,你肯定會遇到需要把.py腳本打包成.exe的情形,如此,至少有兩方面的好處:第一,你的程式碼保密性更好,其他人不能直接看到python程式碼;第二,打包後的exe程式無需再安裝相應的模組即可直接使用;其中,第二條是我們做打包工作的主要考慮,方便工具的分發和使用。
二 python打包工具簡潔
Python是一門開放、包容、優雅的開發語言,所以,相關領域的模組或工具自然是很多的,其中打包工具,比較廣泛的是以下三個:
Pyinstaller
py2exe
Cx_freeze
但是,在此,我只想介紹Pyinstaller的使用,原因是:該工具使用非常簡單,只需要一條命令,無需像其他工具還要編寫setup文件;另外,該工具更新快,能夠適應python的更新,目前發布到3.4版本了。當然,還有其他原因,對其他同質的工具了解不多,擁有Pyinstaller,足夠了!
三 Pyinstaller安裝方法
依稀記得在py2的時代,使用pyinstaller2.x是直接下載的windows安裝包進行安裝,目前遷移到py3,再次關注pyinstaller時,它已經發展到了3.4,並且支援2.7 or 3.4-3.7,這點非常重要,可能其他打包工具還不能這麼好的支援python3。
Pyinstaller的安裝變的非常簡單,如下:
pip install pyinstaller
使用pip安裝的好處是,會把相關的依賴一併安裝了。
四 Pyinstaller用法
該工具好用的主要表現,莫過於使用簡單,打包一個python項目只需一條命令,如下:
Pyinstaller.exe –F -i path/youricon.ico path/yourscript.py
命令過後,腳本就被打包成exe文件了,而且圖標也換成你指定的ico圖片了,是不是很便捷呀!
當然,你也可以不指定exe圖標,此時,無需增加-i 參數,-F參數將腳本打包成單一的exe文件,一般使用該命令即可。
主要參數如下:
參數 |
含義 |
---|---|
-F |
指定打包後只生成一個exe格式的文件 |
-D |
–onedir 創建一個目錄,包含exe文件,但會依賴很多文件(默認選項) |
-c |
–console, –nowindowed 使用控制台,×××面(默認) |
-w |
–windowed, –noconsole 使用窗口,無控制台 |
-p |
添加搜索路徑,在指定的路徑尋找對應的庫。 |
-i |
添加生成程式的icon圖標 |
-n |
為生成的exe起個名字 |
五 報錯及解決方法
安裝完成後,打包程式報錯:「failed to create process」
發生該報錯的可能原因是:
1. python的安裝路徑有空格,比如安裝在Program Files (x86)目錄,pyinstaller版<3.4;
2. pyinstaller==3.4;
針對第一種情況,路徑有空格,解決方法是:
在Python安裝目錄下的Scripts中找到pyinstaller-scripts.py打開,把第一行的路徑加上引號,如#!d:program files (x86)python36python.exe
改為#!"d:program files (x86)python36python.exe"
,解決問題。
針對第二種情況,pyinstaller已經是最新版本,即便python安裝路徑有空格,pyinstaller-scripts.py中解釋器的路徑也會被自動加上引號,一種可行的解決方法是:
把路徑切換到python安裝路徑的scripts目錄,執行python pyinstaller-script.py path/YourScript.py進行打包,即可解決問題。