类似pyinstaller_Python 打包工具对比,Nuitka vs Pyinstaller
py2exe,Pyinstaller,Cx_freeze,Nuitka都可以完成python打包的任務(wù)。
Pyinstaller和Nuitka都號(hào)稱跨平臺(tái),但其實(shí)頂多只能算是工具本身跨平臺(tái),實(shí)際體驗(yàn)中不僅打包產(chǎn)生的文件不能跨平臺(tái),能否成功打包本身也不確定。
Nuitka
nuitka的作用是將python程序轉(zhuǎn)換成C語言的可執(zhí)行elf文件。這樣在運(yùn)行時(shí)就可以享受到C語言處理過程中的優(yōu)化,提高速度。經(jīng)測(cè)試,Nuitka打包后的exe比Pyinstaller打包后的exe運(yùn)行速度提升30%,PyQT5的UI文件轉(zhuǎn)換成py文件轉(zhuǎn)換成C語言后,界面秒開呀。
安裝:
sudo apt-get install nuitka
使用:
假設(shè)有python文件 main.py 其中import了 a.py, b.py, c.py
轉(zhuǎn)換為可執(zhí)行文件只需運(yùn)行:
nuitka --recurse-all main.py
運(yùn)行后會(huì)生成main.exe文件,注意main.py中import的文件會(huì)被自動(dòng)包含。
輸入下面代碼即可執(zhí)行
./main.exe
但是有網(wǎng)友反饋了一些他的坑:
問題:
1.跨平臺(tái)性很差
這點(diǎn),上面的"python打包工具對(duì)比"中也談到了。
具體在我使用時(shí),在ubuntu中打包了一份python文件,拿到windows下運(yùn)行,提示該版本的main.exe 與您運(yùn)行的 Windows 版本不兼容。請(qǐng)查看計(jì)算機(jī)的系統(tǒng)信息,了解是否需要 x86 (32 位)或 x64 (64 位)版本的程序,然后聯(lián)系軟件發(fā)布者。
在centos中運(yùn)行,提示有python依賴庫(kù)找不到。
2.使用 --standalone參數(shù)后無法生成.exe文件
官網(wǎng)介紹說使用該參數(shù)可以解決代碼對(duì)python是否安裝的依賴The created binaries can be made executable independent of the Python installation, with --standalone option.
可是我用這個(gè)參數(shù)后就無法生成可執(zhí)行文件了。
Pyinstaller
安裝:
1、安裝pywin32下載安裝文件:查找到跟自己適用的python版本及window系統(tǒng)版本匹配的
使用pip命令安裝:pip install pywin32
2、安裝Pyinstaller下載安裝文件安裝:
使用pip命令安裝:pip install PyInstaller
運(yùn)行:
pyinstaller main.py
即可得到可執(zhí)行文件,雖然也存在本機(jī)編譯后的文件不能在服務(wù)器執(zhí)行的問題:
gclt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /root/gclt/libz.so.1)
但是在服務(wù)器上編譯的代碼是可以在本機(jī)成功執(zhí)行,當(dāng)然了,所謂的跨平臺(tái),其實(shí)是個(gè)偽命題,Linux下編譯產(chǎn)生的可執(zhí)行文件并不能在Windows和Mac OS下執(zhí)行,前者會(huì)產(chǎn)生類似下面的錯(cuò)誤(使用Nuitka時(shí)也是這樣)Too big to fit in memory
而在Mac OS下則會(huì)直接提示找不到相關(guān)可執(zhí)行文件。
最后,分別在Linux,Windows,Mac OS下分別使用Pyinstaller完成任務(wù)
開發(fā)完python程序后使用pyinstaller 打包成exe程序后出現(xiàn)錯(cuò)誤:
通常的打包命令:
pyinstaller.exe --hidden-import=queue -w -F $FileName$
運(yùn)行出錯(cuò)
為了定位問題的出現(xiàn)需要修改上述打包命令為:pyinstaller.exe --hidden-import=queue -F $FileName$
有時(shí)候?qū)?py文件打包成.exe文件后,不一定能夠正常運(yùn)行。但是點(diǎn).exe后程序一閃而退,就不知道問題出在哪里?在運(yùn)行程序后快速進(jìn)行屏幕抓取:(可能需要抓多次)
錯(cuò)誤信息
從上圖中,可以看出由于文件找不到導(dǎo)致程序出錯(cuò)。
從這里也可以大致了解下pyinstaller成可執(zhí)行程序的流程是:
會(huì)將exe解壓到系統(tǒng)某處(圖中為AppData/Local/Temp下),然后解釋執(zhí)行。
2. 也可以在cmd命令行 或者 Windows PowerShell里面運(yùn)行.exe文件
解決 FileNotFoundError 問題
然后使用如下命令打包:pyinstaller.exe --onefile --additional-hooks-dir=. --hidden-import=queue -w -F robotManagerTools.py
總結(jié)
以上是生活随笔為你收集整理的类似pyinstaller_Python 打包工具对比,Nuitka vs Pyinstaller的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java security provid
- 下一篇: python在eclipse下中文乱码问