Pyinstaller使用教程

2021-08-10 08:55:31 字數 2765 閱讀 9787

安裝

linux or mac

pip install pyinstaller

or easy_install pyinstaller

版本更新

pip install –upgrade pyinstaller

or easy_install –upgrade pyinstaller

windows

windows上執行pyinstaller還需要pywin32或者pypiwin32,其中pypiwin32在你安裝pyinstaller的時候會自動安裝。

使用pyinstaller

pyinstaller分析你的python程式,找到所有的依賴項。然後將依賴檔案和python直譯器放到乙個資料夾下或者乙個可執行檔案中。

打包成乙個資料夾

當使用pyinstaller打包的時候,預設生成乙個資料夾,資料夾中包含所有依賴項,以及可執行檔案。打包成資料夾的好處就是debug的時候可以清楚的看到依賴項有沒有包含。另乙個好處是更新的時候,只需要更新可執行檔案就可以了。當然缺點也很明顯,不方便,不易管理。

pyinstaller script.py

那麼它是如何工作的呢?pyinstaller的引導程式是乙個二進位制可執行程式。當使用者啟動你的程式的時候,pyinstaller的引導程式開始執行,首先建立乙個臨時的python環境,然後通過python直譯器匯入程式的依賴,當然他們都在同乙個資料夾下。

打包成乙個檔案

我們可以用onefile引數將所有檔案打包到乙個可執行檔案中。

pyinstaller –onefile script.py

打包成乙個檔案相對於資料夾更容易管理。壞處執行相對比較慢。這個檔案中包含了壓縮的依賴檔案拷貝(.so檔案)。

當程式執行時,pyinstaller的引導程式會新建乙個臨時資料夾。然後解壓程式的第三方依賴檔案到臨時資料夾中。這也是為什麼乙個可執行檔案比資料夾中執行的時間要長的原因。剩下的就和上面的一樣了。

spec 檔案

當你執行下面命令

pyinstaller options..script.py

需要打包資源檔案

需要include一些pyinstaller不知道的run-time庫

為可執行檔案新增run-time 選項

多程式打包

可以通過下面命令生成spec檔案

pyi-makespec options script.py [other scripts …]

pyinstaller options script.spec

–upx-dir=

–distpath=

–noconfirm=

–ascii

spec 檔案解析

下面是乙個spec檔案的例子。

block_cipher = none

a = analysis([『minimal.py』],

pathex=[『/developer/pitests/minimal』],

binaries=none,

datas=none,

hiddenimports=,

hookspath=none,

runtime_hooks=none,

excludes=none,

ciper=block_cipher)

pyz = pyz(a.pure, a.zipped_data,

cipher=block_cipher)

exe = exe(pyz, …)

coll = collect(…)

spec檔案中主要包含4個class: analysis, pyz, exe和collect.

analysis以py檔案為輸入,它會分析py檔案的依賴模組,並生成相應的資訊

pyz是乙個.pyz的壓縮包,包含程式執行需要的所有依賴

exe根據上面兩項生成

collect生成其他部分的輸出資料夾,collect也可以沒有

修改spec檔案

我們上面說過有時候pyinstaller自動生成的spec檔案並不能滿足我們的需求,最常見的情況就是我們的程式依賴我們本地的一些資料檔案,這個時候就需要我們自己去編輯spec檔案來新增資料檔案了。

上面的spec檔案解析中analysis中的datas就是要新增到專案中的資料檔案,我們可以編輯datas.

a = analysis(

… datas = [(『you/source/file/path』,』file_name_in_project』),

(『source/file2』, 『file_name2』)] …

)可以認為datas是乙個list,每個元素是乙個二元組。元組的第乙個元素是你本地檔案索引,第二個元素是拷貝到專案中之後的檔案名字。除了上面那種寫法,也可以將其提出來。

added_files = […]

a = analysis(

… datas = added_files, … )

其他的二進位制檔案新增方法類似。

總結最後簡單來說,我們要通過pyinstaller生成可執行的檔案主要下面兩步。

pyinstaller [option] mypython.py

option為空生成資料夾,選擇onefile,生成乙個檔案。

如果專案有一些依賴的資料檔案,上面生成的二進位制檔案是無法執行的,這個時候可以通過修改spec檔案,讓後再用pyinstaller執行spec檔案。

pyinstaller [option] mypython.spec

當然也按上文那樣先生成spec檔案。

PyInstaller使用記錄

對於程式設計師來說用ide寫程式,調程式,但是,如果將自己的寫好的工具給別人使用的時候,總不能也要別人先裝個python環境吧。去年寫了乙個批量傳送郵件的小工具,就是pyinstaller打包成exe檔案給別人使用的,現在因為需要再用,又碰到了一些問題,在此一併記錄。奉上pyinstaller官網傳...

pyinstaller打包使用

pyinstaller manage.py 如果直接打包報錯,使用如下命令可以直接生成配置檔案 pyi makespec d manage.py生成的配置檔案格式如下 mode python coding utf 8 block cipher none a analysis impala etl.p...

使用pyinstaller打包python程式

使用python3.7 anaconda環境編寫了個程式,裡面使用了numpy pandas xgboost等包 想用pyinstaller打包成exe,pip install pyinstaller後無法打包成exe檔案 別人說是pyinstaller不相容python3.7 遂安裝py3.6環境...