在創建了獨立應用(自包含該應用的依賴包)之后,還可以使用 PyInstaller 將
Python 程序生成可直接運行的程序,這個程序就可以被分發到對應的 Windows 或 Mac OS X 平台上運行。
安裝 PyInstaller 模塊與安裝其他 Python 模塊一樣,使用 pip 命令安裝即可。在命令行輸入如下命令:
運行上面命令,應該看到如下輸出結果:
在 PyInstaller 模塊安裝成功之后,在 Python 的安裝目錄下的
接下來使用命令行工具進入到此 app 目錄下,執行如下命令:
在命令行窗口中進入 dist 目錄下,在該目錄執行 app.exe ,將會看到該程序生成如下輸出結果:
在上面命令中使用了-F 選項,該選項指定生成單獨的 EXE 文件,因此,在 dist 目錄下生成了一個單獨的大約為 6MB 的 app.exe 文件(在 Mac OS X 平台上生成的文件就叫 app,沒有后綴);與 -F 選項對應的是 -D 選項(默認選項),該選項指定生成一個目錄(包含多個文件)來作為程序。
下面先將 PyInstaller 工具在 app 目錄下生成的 build、dist 目錄刪除,並將 app.spec 文件也刪除,然后使用如下命令來生成 EXE 文件。
PyInstaller 不僅支持 -F、-D 選項,而且也支持如表 1 所示的常用選項。
下面再創建一個帶圖形用戶界面,可以訪問 MySQL 數據庫的應用程序。
在 app 當前所在目錄再創建一個 dbapp 目錄,並在該目錄下創建 Python 程序,其中 exec_select.py 程序負責查詢數據,main.py 程序負責創建圖形用戶界面來顯示查詢結果。
exec_select.py 文件包含的代碼如下:
安裝 PyInstalle
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 模塊安裝成功之后,在 Python 的安裝目錄下的
Scripts(D:\Python\Python36\Scripts)
目錄下會增加一個 pyinstaller.exe 程序,接下來就可以使用該工具將 Python 程序生成 EXE 程序了。
PyInstaller生成可執行程序
PyInstaller 工具的命令語法如下:pyinstaller 選項 Python 源文件
不管這個 Python 應用是單文件的應用,還是多文件的應用,只要在使用 pyinstaller 命令時編譯作為程序入口的 Python 程序即可。PyInstaller工具是跨平台的,它既可以在 Windows平台上使用,也可以在 Mac OS X 平台上運行。在不同的平台上使用 PyInstaller 工具的方法是一樣的,它們支持的選項也是一樣的。
下面先創建一個 app 目錄,在該目錄下創建一個 app.py 文件,文件中包含如下代碼:from say_hello import * def main(): print('程序開始執行') print(say_hello('孫悟空')) # 增加調用main()函數 if __name__ == '__main__': main()
pyinstaller -F app.py
執行上面命令,將看到詳細的生成過程。當生成完成后,將會在此 app 目錄下看到多了一個 dist 目錄,並在該目錄下看到有一個 app.exe 文件,這就是使用 PyInstaller 工具生成的 EXE 程序。在命令行窗口中進入 dist 目錄下,在該目錄執行 app.exe ,將會看到該程序生成如下輸出結果:
程序開始執行
孫悟空,您好!
在上面命令中使用了-F 選項,該選項指定生成單獨的 EXE 文件,因此,在 dist 目錄下生成了一個單獨的大約為 6MB 的 app.exe 文件(在 Mac OS X 平台上生成的文件就叫 app,沒有后綴);與 -F 選項對應的是 -D 選項(默認選項),該選項指定生成一個目錄(包含多個文件)來作為程序。
下面先將 PyInstaller 工具在 app 目錄下生成的 build、dist 目錄刪除,並將 app.spec 文件也刪除,然后使用如下命令來生成 EXE 文件。
pyinstaller -D app.py
執行上面命令,將看到詳細的生成過程。當生成完成后,將會在 app 目錄下看到多了一個 dist 目錄,並在該目錄下看到有一個 app 子目錄,在該子目錄下包含了大量 .dll 文件和 .pyz 文件,它們都是 app.exe 程序的支撐文件。在命令行窗口中運行該 app.exe 程序,同樣可以看到與前一個 app.exe 程序相同的輸出結果。PyInstaller 不僅支持 -F、-D 選項,而且也支持如表 1 所示的常用選項。
-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 的名字 |
在表 1 中列出的只是 PyInstaller 模塊所支持的常用選項,如果需要了解 PyInstaller 選項的詳細信息,則可通過 pyinstaller -h 來查看。
下面再創建一個帶圖形用戶界面,可以訪問 MySQL 數據庫的應用程序。
在 app 當前所在目錄再創建一個 dbapp 目錄,並在該目錄下創建 Python 程序,其中 exec_select.py 程序負責查詢數據,main.py 程序負責創建圖形用戶界面來顯示查詢結果。
exec_select.py 文件包含的代碼如下:
import mysql.connector def query_db(): # ①、連接數據庫 conn = conn = mysql.connector.connect(user='root', password='32147', host='localhost', port='3306', database='python', use_unicode=True) # ②、獲取游標 c = conn.cursor() # ③、調用執行select語句查詢數據 c.execute('select * from user_tb where user_id > %s', (2,)) # 通過游標的description屬性獲取列信息 description = c.description # 使用fetchall獲取游標中的所有結果集 rows = c.fetchall() # ④、關閉游標 c.close() # ⑤、關閉連接 conn.close() return description, rows
mian.py 文件包含的代碼如下:
通過命令行工具進入 dbapp 目錄下,在該目錄下執行如下命令:
from exec_select import * from tkinter import * def main(): description, rows = query_db() # 創建窗口 win = Tk() win.title('數據庫查詢') # 通過description獲取列信息 for i, col in enumerate(description): lb = Button(win, text=col[0], padx=50, pady=6) lb.grid(row=0, column=i) # 直接使用for循環查詢得到的結果集 for i, row in enumerate(rows): for j in range(len(row)): en = Label(win, text=row[j]) en.grid(row=i+1, column=j) win.mainloop() if __name__ == '__main__': main()
Pyinstaller -F -w main.py
上面命令中的 -F 選項指定生成單個的可執行程序,-w 選項指定生成圖形用戶界面程序(不需要命令行界面)。運行上面命令,該工具同樣在 dbapp 目錄下生成了一個 dist 子目錄,並在該子目錄下生成了一個 main.exe 文件。直接雙擊運行 main.exe 程序(該程序有圖形用戶界面,因此可以雙擊運行),讀者可自行查看運行結果。