安裝
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環境...