pip install pyinstaller
強烈建議使用 pip 線上安裝的方式來安裝 PyInstaller 模組,不要使用離線包的方式來安裝,因為 PyInstaller 模組還依賴其他模組,pip 在安裝 PyInstaller 模組時會先安裝它的依賴模組。Successfully installed pyinstaller-x.x.x
其中的 x.x.x 代表 PyInstaller 的版本。Scripts(D:PythonPython36Scripts)
目錄下會增加一個 pyinstaller.exe 程式,接下來就可以使用該工具將 Python 程式生成 EXE 程式了。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()接下來使用命令列工具進入到此 app 目錄下,執行如下命令:
pyinstaller -F app.py
執行上面命令,將看到詳細的生成過程。當生成完成後,將會在此 app 目錄下看到多了一個 dist 目錄,並在該目錄下看到有一個 app.exe 檔案,這就是使用 PyInstaller 工具生成的 EXE 程式。
程式開始執行
孫悟空,您好!
pyinstaller -D app.py
執行上面命令,將看到詳細的生成過程。當生成完成後,將會在 app 目錄下看到多了一個 dist 目錄,並在該目錄下看到有一個 app 子目錄,在該子目錄下包含了大量 .dll 檔案和 .pyz 檔案,它們都是 app.exe 程式的支撐檔案。在命令列視窗中執行該 app.exe 程式,同樣可以看到與前一個 app.exe 程式相同的輸出結果。-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的模組 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, rowsmian.py 檔案包含的程式碼如下:
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()通過命令列工具進入 dbapp 目錄下,在該目錄下執行如下命令:
Pyinstaller -F -w main.py
上面命令中的 -F 選項指定生成單個的可執行程式,-w 選項指定生成圖形化使用者介面程式(不需要命令列介面)。執行上面命令,該工具同樣在 dbapp 目錄下生成了一個 dist 子目錄,並在該子目錄下生成了一個 main.exe 檔案。直接雙擊執行 main.exe 程式(該程式有圖形化使用者介面,因此可以雙擊執行),讀者可自行檢視執行結果。