首頁 > 軟體

使用PyInstaller庫把Python程式打包成exe

2022-05-28 14:00:11

一、pyinstaller簡介

Python是一個指令碼語言,被直譯器解釋執行。它的釋出方式:

  • .py檔案:對於開源專案或者原始碼沒那麼重要的,直接提供原始碼,需要使用者自行安裝Python並且安裝依賴的各種庫。(Python官方的各種安裝包就是這樣做的)

  • .pyc檔案:有些公司或個人因為機密或者各種原因,不願意原始碼被執行者看到,可以使用pyc檔案發布,pyc檔案是Python直譯器可以識別的二進位制碼,故釋出後也是跨平臺的,需要使用者安裝相應版本的Python和依賴庫。

  • 可執行檔案:對於非碼農使用者或者一些小白使用者,你讓他裝個Python同時還要折騰一堆依賴庫,那簡直是個災難。對於此類使用者,最簡單的方式就是提供一個可執行檔案,只需要把用法告訴Ta即可。比較麻煩的是需要針對不同平臺需要打包不同的可執行檔案(Windows,Linux,Mac,...)。

本文主要就是介紹最後一種方式,.py和.pyc都比較簡單,Python本身就可以搞定。將Python指令碼打包成可執行檔案有多種方式,本文重點介紹PyInstaller。

PyInstaller的原理簡介

PyInstaller其實就是把python解析器和你自己的指令碼打包成一個可執行的檔案,和編譯成真正的機器碼完全是兩回事,所以千萬不要指望成打包成一個可執行檔案會提高執行效率,相反可能會降低執行效率,好處就是在執行者的機器上不用安裝python和你的指令碼依賴的庫。在Linux作業系統下,它主要用的binutil工具包裡面的lddobjdump命令。

PyInstaller輸入你指定的的指令碼,首先分析指令碼所依賴的其他指令碼,然後去查詢,複製,把所有相關的指令碼收集起來,包括Python解析器,然後把這些檔案放在一個目錄下,或者打包進一個可執行檔案裡面。

需要注意的是,PyInstaller打包的執行檔案,只能在和打包機器系統同樣的環境下。也就是說,不具備可移植性,若需要在不同系統上執行,就必須針對該平臺進行打包。

將.py原始碼轉換成無需原始碼的可執行檔案

pyInstalller下載網址

二、pyinstaller在windows下的安裝

使用命令pip install pyinstaller即可

pip install pyinstaller

在windows下,pyinstaller需要PyWin32的支援。當用pip安裝pyinstaller時未找到PyWin32,會自動安裝pypiwin32。

三、打包

打包的app裡並不包含任何原始碼,但將指令碼的.pyc檔案打包了。

基本語法:

pyinstaller options myscript.py

常用的可選引數如下:

  • -D, --one-dir打包成一個資料夾,預設
  • -F, --one-file打包成一個exe檔案
  • -p DIR, --paths DIR新增路徑,一般用來新增程式所用到的包的所在位置
  • -c, --console, --nowindowed提供程式視窗,程式有輸入輸出的介面,預設
  • -w, --windowed, --noconsole無視窗,程式後臺執行
  • -i <FILE.ico or FILE.exe,ID or FILE.icns>, --icon <FILE.ico or FILE.exe,ID or FILE.icns>新增icon圖示

pyinstaller --onefile --nowindowed  C:/PycharmProjects/untitled/hello.py

就會在當前檔案下形成build資料夾、dist資料夾和.spec檔案。
dist裡就是guess_exe.exe可執行檔案。

如果有打包錯誤,具體看build裡的warn***.txt檔案,裡面詳細記載了錯誤的原因。一般都是庫丟失。
spec檔案告訴PyInstaller如何去處理指令碼。它對指令碼名以及大多數pyinstaller的可選引數進行加密。PyInstaller就是通過執行spec檔案的內容來build the app。

四、pyinstaller常見錯誤

用pyinstaller生成exe時報錯 TypeError: an integer is required (got type bytes)

TypeError: an integer is required (got type bytes)

解決辦法:報錯前的pyinstaller是用 pip install pyinstaller 來安裝的,改成用 pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz 再安裝一次。

到此這篇關於使用PyInstaller庫把Python程式打包成exe的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com