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