09.26 這篇文章過後,別再問我如何將 Python 程序打包成 .exe 文件!

這篇文章過後,別再問我如何將 Python 程序打包成 .exe 文件!

當我給他們一個 Python 程序時,他們是完全不知道該怎麼運行的。甚至很多機器沒有自帶Python,解釋器都沒有如何運行?

於是我想是不是可以將我的程序打包成可執行文件,直接運行?

就像這樣:

這篇文章過後,別再問我如何將 Python 程序打包成 .exe 文件!

Python 程序都是腳本的方式,一般是在解析器裡運行,如果要發佈出去,需要提前安裝解析器才可以運行,為了在 Windows 裡方便發佈,只要點擊一個 EXE 文件運行,並且打包所需要庫文件,這樣發佈給用戶使用就會更方便。

PyInstaller(私信小編007即可自動獲得Python學習資料!)

PyInstaller 是一個十分有用的第三方庫,可以用來打包 python 應用程序,打包完的程序就可以在沒有安裝 Python 解釋器的機器上運行了。

它能夠在 Windows、Linux、 Mac OS X 等操作系統下將 Python 源文件打包,通過對源文件打包, Python 程序可以在沒有安裝 Python 的環境中運行,也可以作為一個 獨立文件方便傳遞和管理。

PyInstaller 支持 Python 2.7 / 3.4-3.7。可以在 Windows、Mac OS X 和 Linux 上使用,但是並不是跨平臺的,而是說你要是希望打包成 .exe 文件,需要在 Windows 系統上運行 PyInstaller 進行打包工作。

下面我們以 Windows 為例來進行程序的打包工作。

安裝

pip install pyinstaller
# 或者

python -m pip install pyinstaller

安裝成功:

這篇文章過後,別再問我如何將 Python 程序打包成 .exe 文件!

使用

pyinstaller -F helloworld.py

其中, -F 表示打包成單獨的 .exe 文件,這時生成的 .exe 文件會比較大,而且運行速度回較慢。僅僅一個 helloworld 程序,生成的文件就 5MB 大。

另外,使用 -i 還可以指定可執行文件的圖標;

-w 表示去掉控制檯窗口,這在 GUI 界面時非常有用。不過如果是命令行程序的話那就把這個選項刪除吧!

PyInstaller 會對腳本進行解析,並做出如下動作:

1、在腳本目錄生成 helloworld.spec 文件;

2、創建一個 build 目錄;

3、寫入一些日誌文件和中間流程文件到 build 目錄;

4、創建 dist 目錄;

5、生成可執行文件到 dist 目錄;

執行流程:

這篇文章過後,別再問我如何將 Python 程序打包成 .exe 文件!

生成文件:

這篇文章過後,別再問我如何將 Python 程序打包成 .exe 文件!

這篇文章過後,別再問我如何將 Python 程序打包成 .exe 文件!

注意事項

1、直接運行最終的 .exe 程序,可能會出現 一閃而過 的情況,這種情況下要麼是程序運行結束(比如直接打印的 helloWorld),要麼程序出現錯誤退出了。

這種情況下,建議在命令行 cmd 下運行 .exe 文件,這時就會有文本輸出到窗口;

2、 -i 是改變圖標的,但是我發現是有些 bug 的,客官請看:

這篇文章過後,別再問我如何將 Python 程序打包成 .exe 文件!

放大過程中,圖標才變成了我們設置的圖標。

3、寫代碼的時候應當有個良好的習慣,用什麼函數導什麼函數,不要上來 import 整個庫,最後你會發現你一個 100KB 的代碼打包出來有 500MB;

4、當你的代碼需要調用一些圖片和資源文件的,這是不會自動導入的,需要你自己手動複製進去才行。不然 exe 文件運行時命令窗口會報錯找不到這個文件。

導入方法:

假設程序中需要引入一個 test.txt 文件,首先我們運行:

pyi-makespec -F helloworld.py

此時會生成一個 .spec 文件,這個文件會告訴 pyinstaller 如何處理你的腳本,pyinstaller 創建一個 exe 的文件就是依靠它裡面的內容進行執行的。

正常情況下你不需要去修改這個 spec 文件,除非你需要打包一個 dll 或者 so 文件或者其他數據文件。

那麼我們就需要修改這個 spec 文件:

a = Analysis(['helloworld.py'],
pathex=['/home/test'],
binaries=[],

datas=[], ###

修改為:

a = Analysis(['helloworld.py'],
pathex=['/home/test'],
binaries=[],
datas=[('test.txt','.')], ##

然後在生成 exe 文件:

pyinstaller helloworld.spec

然後生成的文件就可以正常引入外部文件了。

總結

本文只是使用 PyInstaller 打包流程進行簡單的介紹,更多內容可以參見官方文檔


分享到:


相關文章: