pyinstaller可以用來(lái)打包python應(yīng)用程序,打包完的程序就可以在?有安裝python解釋器的機(jī)器上運(yùn)行了。pyinstaller支持python 2.7和python 3.3 。可以在windows、mac os x和linux上使用,但是并不是跨平臺(tái)的,而是說(shuō)你要是希望打包成.exe文件,需要在windows系統(tǒng)上運(yùn)行pyinstaller進(jìn)行打包工作;打包成mac app,需要在mac os上使用。
安裝
linux or mac
你可以從pypi上下載安裝,當(dāng)然也可以使用pip或者easy_install來(lái)安裝。
1 2 3 pip install pyinstaller or easy_install pyinstaller 版本更新
1 2 3 pip install --upgrade pyinstaller or easy_install --upgrade pyinstaller windows
windows上運(yùn)行pyinstaller還需要pywin32或者pypiwin32,其中pypiwin32在你安裝pyinstaller的時(shí)候會(huì)自動(dòng)安裝。
使用pyinstaller
pyinstaller分析你的python程序,找到所有的依賴項(xiàng)。然后將依賴文件和python解釋器放到一個(gè)文件夾下或者一個(gè)可執(zhí)行文件中。
打包成一個(gè)文件夾
當(dāng)使用pyinstaller打包的時(shí)候,默認(rèn)生成一個(gè)文件夾,文件夾中包含所有依賴項(xiàng),以及可執(zhí)行文件。打包成文件夾的好處就是debug的時(shí)候可以清楚的看到依賴項(xiàng)有沒有包含。另一個(gè)好處是更新的時(shí)候,只需要更新可執(zhí)行文件就可以了。當(dāng)然缺點(diǎn)也很明顯,不方便,不易管理。
1 pyinstaller script.py 那么它是如何工作的呢?pyinstaller的引導(dǎo)程序是一個(gè)二進(jìn)制可執(zhí)行程序。當(dāng)用戶啟動(dòng)你的程序的時(shí)候,pyinstaller的引導(dǎo)程序開始運(yùn)行,首先創(chuàng)建一個(gè)臨時(shí)的python環(huán)境,然后通過(guò)python解釋器導(dǎo)入程序的依賴,當(dāng)然他們都在同一個(gè)文件夾下。
打包成一個(gè)文件
我們可以用onefile參數(shù)將所有文件打包到一個(gè)可執(zhí)行文件中。
1 pyinstaller --onefile script.py 打包成一個(gè)文件相對(duì)于文件夾更容易管理。壞處運(yùn)行相對(duì)比較慢。這個(gè)文件中包含了壓縮的依賴文件拷貝(.so文件)。
當(dāng)程序運(yùn)行時(shí),pyinstaller的引導(dǎo)程序會(huì)新建一個(gè)臨時(shí)文件夾。然后解壓程序的第三方依賴文件到臨時(shí)文件夾中。這也是為什么一個(gè)可執(zhí)行文件比文件夾中執(zhí)行的時(shí)間要長(zhǎng)的原因。剩下的就和上面的一樣了。
spec 文件
當(dāng)你執(zhí)行下面命令
1 pyinstaller options..script.py pyinstaller首先建一個(gè)sepc(specification)文件:script.spec。這個(gè)文件的存放地址可以使用參數(shù)–specpath= 來(lái)定義,默認(rèn)放在當(dāng)前文件夾下。
spec文件的作用是什么呢?它會(huì)告訴pyinstaller如何處理你的py文件,它會(huì)將你的py文件名字和輸入的大部分參數(shù)進(jìn)行編碼。pyinstaller通過(guò)執(zhí)行spec文件中的內(nèi)容來(lái)生成app,有點(diǎn)像makefile。正常使用中我們是不需要管spec文件的,但是下面幾種情況需要修改spec文件:
需要打包資源文件
需要include一些pyinstaller不知道的run-time庫(kù)
為可執(zhí)行文件添加run-time 選項(xiàng)
多程序打包
可以通過(guò)下面命令生成spec文件
1 pyi-makespec options script.py [other scripts ...] 修改完spec文件,就可以通過(guò)下面命令來(lái)生成app文件了
1 pyinstaller options script.spec 當(dāng)通過(guò)spec文件來(lái)生成app文件的時(shí)候只有下面幾個(gè)參數(shù)是有用的:
–upx-dir=
–distpath=
–noconfirm=
–ascii
spec 文件解析
下面是一個(gè)spec文件的例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 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個(gè)class: analysis, pyz, exe和collect.
analysis以py文件為輸入,它會(huì)分析py文件的依賴模塊,并生成相應(yīng)的信息
pyz是一個(gè).pyz的壓縮包,包含程序運(yùn)行需要的所有依賴
exe根據(jù)上面兩項(xiàng)生成
collect生成其他部分的輸出文件夾,collect也可以沒有
修改spec文件
我們上面說(shuō)過(guò)有時(shí)候pyinstaller自動(dòng)生成的spec文件并不能滿足我們的需求,最常見的情況就是我們的程序依賴我們本地的一些數(shù)據(jù)文件,這個(gè)時(shí)候就需要我們自己去編輯spec文件來(lái)添加數(shù)據(jù)文件了。
上面的spec文件解析中analysis中的datas就是要添加到項(xiàng)目中的數(shù)據(jù)文件,我們可以編輯datas.
1 2 3 4 5 6 a = analysis( ... datas = [(\\\'you/source/file/path\\\',\\\'file_name_in_project\\\'), (\\\'source/file2\\\', \\\'file_name2\\\')] ... ) 可以認(rèn)為datas是一個(gè)list,每個(gè)元素是一個(gè)二元組。元組的第一個(gè)元素是你本地文件索引,第二個(gè)元素是拷貝到項(xiàng)目中之后的文件名字。除了上面那種寫法,也可以將其提出來(lái)。
1 2 3 4 5 6 7 added_files = [...] a = analysis( ... datas = added_files, ... ) 其他的二進(jìn)制文件添加方法類似。
總結(jié)
最后簡(jiǎn)單來(lái)說(shuō),我們要通過(guò)pyinstaller生成可執(zhí)行的文件主要下面兩步。
1 pyinstaller [option] mypython.py option為空生成文件夾,選擇onefile,生成一個(gè)文件。
如果項(xiàng)目有一些依賴的數(shù)據(jù)文件,上面生成的二進(jìn)制文件是無(wú)法運(yùn)行的,這個(gè)時(shí)候可以通過(guò)修改spec文件,讓后再用pyinstaller運(yùn)行spec文件。
1 pyinstaller [option] mypython.spec 當(dāng)然也按上文那樣先生成spec文件。
100g云服務(wù)器價(jià)格騰訊云服務(wù)器關(guān)機(jī)收費(fèi)美國(guó)電商大促銷即將開始 不過(guò)銷量會(huì)比雙11差多了選擇哪個(gè)教程里沒有第一次授權(quán)后就得馬上下載代碼包進(jìn)行上傳提交阿里和華為云服務(wù)器哪個(gè)便宜電腦硬盤排行榜_電腦硬盤排名2020年5月宏怎么取消_表格怎么取消宏功能圖文步驟購(gòu)買香港阿里云服務(wù)器需要什么