python使用pyinstaller把程式進行打包

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第7天,點選檢視活動詳情

1 pyinstaller的安裝與簡單使用

1.1 pyinstaller的安裝

1、安裝方法一:使用pip安裝

pip install pyinstaller

2、安裝方法二:從pyinstaller官網下載原始碼安裝(參考

下載原始碼後進行解壓,然後執行:

python setup.py install

1.2 pyinstaller對單個py檔案進行打包成exe檔案

1、首先來看一下打包的程式目錄:

image.png

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可執行檔案儲存在該目錄下

image.png

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.

image.png

2、全域性搜尋一下libiomp5md.dll檔案,會發現在Library\bin目錄下有這個檔案的,只不過名字被我改為libiomp5md_bak.dll(之前遇到了一個什麼錯誤,需要刪除該目錄下的這個檔案,所以我備份了一下),只需要把備份的檔名改回libiomp5md.dll即可解決上面的問題!

image.png

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