python使用pyinstaller把程式進行打包
持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第7天,點選檢視活動詳情
1 pyinstaller的安裝與簡單使用
1.1 pyinstaller的安裝
1、安裝方法一:使用pip安裝
pip install pyinstaller
2、安裝方法二:從pyinstaller官網下載原始碼安裝(參考)
下載原始碼後進行解壓,然後執行:
python setup.py install
1.2 pyinstaller對單個py檔案進行打包成exe檔案
1、首先來看一下打包的程式目錄:
2、test.py程式功能:使用tkinter
建立一個視窗,把images/zly.png
圖片顯示在視窗中。程式如下:
```python import cv2 import numpy as np from PIL import Image, ImageTk import tkinter as tk
window = tk.Tk() window.title('demo') window.geometry('600x400')
image = cv2.imread('images/zly.png') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = cv2.resize(image, (500, 200)) image_pil = Image.fromarray(np.uint8(image))
canvas = tk.Canvas(window, width=500, height=200, bg='green') image_file = ImageTk.PhotoImage(image=image_pil)
報錯:AttributeError: 'PhotoImage' object has no attribute '_PhotoImage__photo' 引數關鍵字是image,我寫成Image所以報該錯誤,找半天!
image = canvas.create_image(500/2, 0, anchor='n', image=image_file) # 圖片的錨定點anchor(這裡就是值影象的上邊緣的中間位置),放到畫布的(x=0, y=0)的位置 canvas.pack(side='top') window.mainloop() ```
3、pyinstaller -F對程式進行打包
pyinstaller -F test.py
打包後程序目錄如下:
- xxx.spec:是記錄打包的引數檔案(打包好之後可以刪除)
- build目錄:打包過程中生成的檔案(打包好之後可以刪除)
- dist目錄:打包生成的exe可執行檔案儲存在該目錄下
4、這樣就可以把該執行檔案拷貝給其他人使用了,而其他人不需要再安裝python編譯器以及程式相關的python依賴庫包。如下我把生成的可執行檔案拷貝到桌面:
pythobn
C:\Users\Administrator\Desktop\dist>tree /F
C:.
│ test.exe # 277MB
│
└─images
zly.png
C:\Users\Administrator\Desktop\dist>
注意:
程式中會讀取
images/zly.png
科執行檔案,所以當前可執行檔案會在當前目錄下找,因此需要把images目錄拷貝到dist目錄下。還有最好用相對路徑,絕對路徑拷貝到其他電腦由於路徑問題可能會出問題!
可以看到,我們只打包一個簡單的程式,打包出的exe檔案就有277MB,這是因為程式會把python直譯器,pillow、tkinter、numpy等依賴庫包都打包到exe檔案中,因此這也是使用pyinstaller打包exe程式比較臃腫的原因
!
到這裡,你已經知道怎麼使用pyinstaller打包一個py檔案為可執行的exe檔案啦,下面介紹pyinstaller的更多引數使用!
2 pyinstaller的更多引數使用
2.1 pyinstaller常用的引數
1、pyinstaller常用的引數
-
-F
:表示生成單個可執行檔案,會把生成的exe可執行檔案存放到dist目錄下!
-
w
: 表示去掉控制檯視窗,這在GUI介面時非常有用。不過如果是命令列程式的話那就把這個選項刪除吧! -
p
: 表示你自己自定義需要載入的類
路徑,一般情況下用不到。設定 Python 匯入模組的路徑(和設定 PYTHONPATH 環境變數的作用相似)。也可使用路徑分隔符(Windows 使用分號,Linux 使用冒號)來分隔多個路。 -
i
: 表示可執行檔案的圖示,就是xxx.ico型別的圖片
,如何生成ico圖片可以:參考
2、pyinstaller更多引數可以使用-h檢視
python
pyinstaller -h
3 pyinstaller常見生成exe檔案常見錯誤
3.1 pyinstaller打包py檔案的時候找不到libiomp5md.dll檔案
1、在使用:pyinstaller -F test.py
生成可執行檔案時報錯:Unable to find "C:\software_install\Anaconda_install\Library\bin\libiomp5md.dll" when adding binary and data files.
2、全域性搜尋一下libiomp5md.dll
檔案,會發現在Library\bin
目錄下有這個檔案的,只不過名字被我改為libiomp5md_bak.dll
(之前遇到了一個什麼錯誤,需要刪除該目錄下的這個檔案,所以我備份了一下
),只需要把備份的檔名改回libiomp5md.dll
即可解決上面的問題!
3.2 pyinstall打包的時候報enum相關錯誤
1、在使用:pyinstaller -F test.py
生成可執行檔案時報錯:AttributeError: module 'enum' has no attribute 'IntFlag'
2、解決方式:從python 3.6開始,enum34庫不再與標準庫相容。該庫也是不必要的,所以直接解除安裝即可:
pip uninstall enum34
參考:https://cpython.blog.csdn.net/article/details/110944639 參考:https://blog.csdn.net/MaXiaoTiancsdn/article/details/120641755
- windows上比較好用的截圖軟體 Gif錄製軟體 看圖軟體,建議收藏!
- python使用pyinstaller把程式進行打包
- 深度學習視覺化工具visdom使用
- linux後臺執行命令screen的使用
- NVIDIA Jetson Xavier NX上匯入tensorflow報錯:AttributeError: module ‘wrapt‘ has no att
- 在NVIDIA Jetson Xavier NX上把yolov4-deepsort的模型pb模型轉換為tensorrt模型
- 在NVIDIA Jetson Xavier NX上安裝llvm和numba,以及在Jetxon NX上跑通CenterTrack的目標跟蹤模型
- TensorRT7.0版本在Linux環境安裝,以及安裝python API介面,測試TensorRT中的測試用例
- Jetson nano刷好機之後需要做的準備工作
- 本地直播平臺的搭建—四種方式
- python opencv用電腦呼叫手機攝像頭或其他網路攝像頭
- Linux中gcc的編譯、靜態庫和動態庫的製作
- Linux開機自動啟動python指令碼程式,或 Jetson nano或Jetson Xavier NX開機自動啟動python指令碼程式
- lidar鐳射雷達介紹,以及使用鐳射雷達資料通過深度學習做目標檢測
- Camelot:從pdf中提取表格資料
- python中的h5py開源庫的使用
- python3建立定時任務