Pyinstaller & Nuitka 打包瘦身筆記 [Kurt]

更新於 發佈於 閱讀時間約 1 分鐘



只打包scipy特定模組, import時要只import要的部份

然後打包時指定排除

#排除import以外的庫
pyinstaller --onefile --exclude-module=scipy.* --exclude-module=scipy.interpolate.* --exclude-module=scipy.signal.* your_script.py
#排除 NumPy 的 testing 和 f2py 模块,它们通常不需要打包。
pyinstaller --onefile --exclude-module=numpy.testing --exclude-module=numpy.f2py your_script.py
#排除 matplotlib 的测试模块,它们通常不是必需的
​pyinstaller --onefile --exclude-module=matplotlib.tests --exclude-module=matplotlib.testing your_script.py
#排除扩展功能在 mpl_toolkits 模块中,比如 mplot3d 和 basemap。
pyinstaller --onefile --exclude-module=mpl_toolkits.mplot3d --exclude-module=mpl_toolkits.basemap your_script.py

nuitka --onefile --nofollow-imports --include-module=scipy.interpolate --include-module=scipy.signal your_script.py
nuitka --onefile --nofollow-imports --include-module=numpy.core --include-module=numpy.linalg your_script.py


matplotlib 包含很多字体文件和样式文件,它们可能不必要。打包时可以选择性删除这些文件:

手动删除不必要的字体和样式文件:找到 matplotlib 的安装目录,然后进入 mpl-data/fonts 和 mpl-data/stylelib 文件夹,删除不需要的字体和样式文件。这样可以减少文件大小。

使用 PyInstaller 的 --add-data 和 --exclude-module 选项:可以控制添加和排除的数据。例如,仅添加所需的字体或样式文件:

pyinstaller --onefile --add-data "path/to/matplotlib/mpl-data/fonts;mpl-data/fonts" your_script.py


使用自定义 matplotlib 配置文件

matplotlib 使用一个配置文件(通常位于 ~/.matplotlib/matplotlibrc),这个文件控制 matplotlib 的默认行为。通过编辑这个文件,您可以指定默认字体、样式和不必要的功能,从而减少打包的大小。例如:

backend : Agg

==================================

Nuitka的使用

Nuitka 生成的包大小通常最小,啟動速度最快。支援 Windows、macOS 和 Linux。適合對性能有較高要求的應用。另外可以和pyinstaller配合,首先使用 Nuitka 编译,优化代码性能并减少不必要的 Python 解释器依赖,也可以混淆与保护,代码被转化为 C/C++ 代码并编译成机器码,这比简单的打包更难反编译。

nuitka --standalone --output-dir=dist example.py
cd dist
pyinstaller --onefile --add-data "./*:./" example.spec


單獨使用 Nuitka 编译 example.py 脚本,并生成一个可执行文件。以下是一些常用的 Nuitka 命令选项:

--standalone:生成独立的可执行文件,包含所有依赖项。

--onefile:将所有文件打包为单个可执行文件。

--enable-plugin=:启用某些插件(如 numpy、matplotlib 等),以优化支持特定的库。

--show-progress:显示编译进度。

执行以下命令来编译 Python 脚本:

pip install nuitka
nuitka --standalone --onefile --enable-plugin=numpy --enable-plugin=matplotlib example.py

调整 Nuitka 选项以优化输出

可以根据需要调整 Nuitka 的其他选项,以优化生成的可执行文件:


--lto(Link Time Optimization):启用链接时优化,可以进一步减小文件大小和提升性能。

--follow-imports:递归跟随所有导入,确保没有遗漏任何必要的模块。

--disable-console(Windows 专用):隐藏控制台窗口,适用于 GUI 应用程序。

例如,使用链接时优化和递归导入选项:

nuitka --standalone --onefile --lto --follow-imports example.py

如果打包的文件过大,您可以检查并排除不必要的模块。在 Nuitka 中,您可以使用 --nofollow-import-to 选项排除特定模块:

#排除 matplotlib.tests 模块(以及任何其他不需要的测试模块)
nuitka --standalone --onefile --nofollow-import-to=matplotlib.tests example.py


留言
avatar-img
留言分享你的想法!
avatar-img
hls Ding的沙龍
7會員
64內容數
ktest
hls Ding的沙龍的其他內容
2025/03/06
import csv import os folder = 'D:/PROGRAMMING/PythonCode/data_arrange/' fname_sum = 'sum.csv' bump = 6 csv_filenames = [f for f in os.listdir(folde
2025/03/06
import csv import os folder = 'D:/PROGRAMMING/PythonCode/data_arrange/' fname_sum = 'sum.csv' bump = 6 csv_filenames = [f for f in os.listdir(folde
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
Thumbnail
在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
Thumbnail
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
Thumbnail
解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
Thumbnail
IDE 升級後出現了一樣的錯誤,手上程式碼沒有 pylint black-format 檢查上不了 gitlab,我又點開了那個很小很小的 x 符號,裡面 logs 提示的解決方式是升級..
Thumbnail
IDE 升級後出現了一樣的錯誤,手上程式碼沒有 pylint black-format 檢查上不了 gitlab,我又點開了那個很小很小的 x 符號,裡面 logs 提示的解決方式是升級..
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News