1. 程式人生 > 其它 >將python指令碼打包為exe可執行檔案

將python指令碼打包為exe可執行檔案

技術背景

在很多情況下,程式設計人員是在Linux環境下完成的程式設計任務,但是更多的使用人員是在Windows環境下的,比方說,在參考連結1的文章中提到:

那麼我們就不得不考慮一個環境轉化的問題。python作為一門通用程式語言,本身可以在不同的環境下執行,但可執行檔案不是。就目前來說,最便捷的方法還是在各自的平臺上去用pyinstaller編譯可執行檔案。

編寫python指令碼

當我們編譯可執行檔案時,首先我們需要一個可以執行的python任務指令碼,這個指令碼的內容可以是一系列複雜的運算,可以是顯示一張圖片,也可以是一整個完整的PC端軟體。這裡我們所寫的一個任務是,用numpy建立一個離散的正弦函式影象,然後使用matplotlib將其展示出來:

# plot.py import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,10,1000) y = np.sin(x) plt.figure() plt.plot(x,y,'o',color='green') plt.show()

需要注意的是,如果是建立的python指令碼中依賴於一些列印輸出函式,那在編譯可執行檔案時需要指定彈出終端視窗,否則程式沒辦法正確執行。

安裝pyinstaller並編譯可執行檔案

pyinstaller也是一個跨平臺的python工具,在windows和linux上面都可以使用pip來進行安裝和管理:

python3 -m pip install pyinstaller

先以linux平臺為例,安裝pyinstaller成功之後,可以直接執行如下指令對python指令碼進行編譯:

$ pyinstaller -F plot.py ... $ ll total 24 drwxr-xr-x 4 dechin dechin 4096 Apr 20 14:26 ./ drwxr-xr-x 4 dechin dechin 4096 Apr 19 22:31 ../ drwxr-xr-x 3 dechin dechin 4096 Apr 20 14:26 build/ drwxr-xr-x 2 dechin dechin 4096 Apr 20 14:28 dist/ -rw-r--r-- 1 dechin dechin 160 Apr 20 14:21 plot.py -rw-r--r-- 1 dechin dechin 808 Apr 20 14:26 plot.spec $ ll dist/ total 264376 drwxr-xr-x 2 dechin dechin 4096 Apr 20 14:28 ./ drwxr-xr-x 4 dechin dechin 4096 Apr 20 14:26 ../ -rwxr-xr-x 1 dechin dechin 270710928 Apr 20 14:28 plot*

我們可以看到,編譯成功後,在當前的路徑下回生成build和dist資料夾,其中可執行檔案就放在dist路徑下。在linux下可以直接使用./plot

的指令來執行該可執行檔案,效果如下:

關於pyinstaller的指令,常用的還有指定彈出終端視窗的指令(用於輸出程式列印內容)以及程式顯示logo的指令(一般為ico檔案):

pyinstaller -F -w plot.py # 彈出黑色對話方塊 pyinstaller -F -i ico_file.ico plot.py # 指定顯示圖示

在linux環境下完成編譯後,我們可以看到生成的可執行檔案也只能在linux環境下執行。為了生成windows環境下可以執行的exe可執行檔案,我們切換到windows系統下來執行:

Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022/4/20 14:28 dist d----- 2022/4/20 14:26 build ------ 2022/4/20 14:26 808 plot.spec ------ 2022/4/20 14:21 160 plot.py PS > pyinstaller -F .\plot.py ... 47314 INFO: Appending PKG archive to EXE 62696 INFO: Building EXE from EXE-00.toc completed successfully. PS > ls .\dist\ 目錄: \\wsl.localhost\Ubuntu-18.04\home\dechin\projects\project0331\dist Mode LastWriteTime Length Name ---- ------------- ------ ---- ------ 2022/4/20 14:28 270710928 plot ------ 2022/4/20 14:40 36811075 plot.exe

也是同樣的執行方法,編譯完成後在dist資料夾下生成了一個新的可執行檔案plot.exe,執行效果如下:

在windows環境下執行軟體經常會彈出一些視窗,我們直接放行就好了:

可以看到,雖然跟linux下可執行檔案的執行結果,在視覺效果上略有差異,但基本上還是大同小異。

總結概要

在完成一個軟體或者程式的實現之後,最後的一步就是釋出,釋出的目的是為了讓更多的人來使用這個專案,而大部分的人是沒有相應的程式設計環境的,因此我們必須考慮將程式碼編譯成各個平臺的可執行檔案,再發布給使用者去使用。本文主要介紹通過pyinstaller在linux和windows上分別打包python指令碼為可執行檔案,想要跨平臺的編譯軟體就目前而言實現起來還比較困難,博主本地使用的是Win11+WSL2 Ubuntu Linux的環境,能夠在一定的程度上解決跨平臺釋出的問題。

版權宣告

本文首發連結為:https://www.cnblogs.com/dechinphy/p/second-quantization.html

作者ID:DechinPhy

更多原著文章請參考:https://www.cnblogs.com/dechinphy/

打賞專用連結:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

騰訊雲專欄同步:https://cloud.tencent.com/developer/column/91958

CSDN同步連結:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343

51CTO同步連結:https://blog.51cto.com/u_15561675

參考連結

  1. https://www.cert.org.cn/publish/main/upload/File/2019 1 operating system.pdf