天天看點

python生成exe檔案

在使用過程中,我們有時候會需要将python程式發給沒有安裝python環境的使用者使用,這時後我們就需要将其代碼打包成exe發給對方。

安裝 PyInstaller

Python 預設并不包含 PyInstaller 子產品,是以需要自行安裝 PyInstaller 子產品。

安裝 PyInstaller 子產品與安裝其他 Python 子產品一樣,使用 pip 指令安裝即可。在指令行輸入如下指令:

pip install pyinstaller

強烈建議使用 pip 線上安裝的方式來安裝 PyInstaller 子產品,不要使用離線包的方式來安裝,因為 PyInstaller 子產品還依賴其他子產品,pip 在安裝 PyInstaller 子產品時會先安裝它的依賴子產品。

運作上面指令,應該看到如下輸出結果:

Successfully installed pyinstaller-x.x.x

其中的 x.x.x 代表 PyInstaller 的版本。

pyinstaller -v

在 PyInstaller 子產品安裝成功之後,在 Python 的安裝目錄下的 

Scripts(D:\Python\Python36\Scripts)

 目錄下會增加一個 pyinstaller.exe 程式,接下來就可以使用該工具将 Python 程式生成 EXE 程式了。

PyInstaller生成可執行程式

PyInstaller 工具的指令文法如下:

pyinstaller 選項 Python 源檔案

不管這個 Python 應用是單檔案的應用,還是多檔案的應用,隻要在使用 pyinstaller 指令時編譯作為程式入口的 Python 程式即可。

PyInstaller工具是跨平台的,它既可以在 Windows平台上使用,也可以在 Mac OS X 平台上運作。在不同的平台上使用 PyInstaller 工具的方法是一樣的,它們支援的選項也是一樣的。

接下來使用指令行工具進入到此 app 目錄下,執行如下指令:

pyinstaller -F checker_param.py

執行上面指令,将看到詳細的生成過程。當生成完成後,将會在此 checker_param目錄下看到多了一個 dist 目錄,并在該目錄下看到有一個 checker_param.exe 檔案,這就是使用 PyInstaller 工具生成的 EXE 程式。

170692 INFO: Building COLLECT COLLECT-00.toc completed successfully.
python生成exe檔案

 在指令行視窗中進入 dist 目錄下,在該目錄執行 app.exe ,将會看到該程式生成如下輸出結果:

Microsoft Windows [版本 10.0.18363.1679]
(c) 2019 Microsoft Corporation。保留所有權利。

C:\Users\Rnanprince\dist\checker_param>checker_param.exe
{'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}
5
[1, 2, 3, 4]
[1, 2, 3.0, 4]

C:\Users\Rnanprince\dist\checker_param>
           

PyInstaller 不僅支援 -F、-D 選項,而且也支援如表 1 所示的常用選項。

表 1 PyInstaller 支援的常用選項

-h,--help 檢視該子產品的幫助資訊
-F,-onefile 産生單個的可執行檔案
-D,--onedir 産生一個目錄(包含多個檔案)作為可執行程式
-a,--ascii 不包含 Unicode 字元集支援
-d,--debug 産生 debug 版本的可執行檔案
-w,--windowed,--noconsolc 指定程式運作時不顯示指令行視窗(僅對 Windows 有效)
-c,--nowindowed,--console 指定使用指令行視窗運作程式(僅對 Windows 有效)
-o DIR,--out=DIR 指定 spec 檔案的生成目錄。如果沒有指定,則預設使用目前目錄來生成 spec 檔案
-p DIR,--path=DIR 設定 Python 導入子產品的路徑(和設定 PYTHONPATH 環境變量的作用相似)。也可使用路徑分隔符(Windows 使用分号,Linux 使用冒号)來分隔多個路徑
-n NAME,--name=NAME 指定項目(産生的 spec)名字。如果省略該選項,那麼第一個腳本的主檔案名将作為 spec 的名字

參考:http://c.biancheng.net/view/2690.html