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

更新於 2024/08/25閱讀時間約 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
6會員
63內容數
ktest
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
hls Ding的沙龍 的其他內容
計算梯度(高低變化速度)
from win32com.client import Dispatch path = "D:\PROGRAMMING\PythonCode\pypptx\image1.png" # 启动PowerPoint应用程序 ppt = Dispatch('PowerPoint.Applicatio
本篇文章將教你如何使用Python和PyQt5來建立一個GUI應用程式。PyQt5是一個相當流行的Python模組,透過這個文章你將學習如何使用它來建立一個互動式的應用程式。
這段程式碼假設您的XYZ資料存儲在名為"Sheet1"的工作表中的A1:Cn範圍內,其中n是資料行的數量。它將資料提取出來,然後在新建的工作表中按照網格的形式重新排列。
Vertexes和linedefs是構成doom關卡地圖的主要參數,在WAD的每個地圖區塊都會存放屬於該地圖的vertexes和linedefs。
計算梯度(高低變化速度)
from win32com.client import Dispatch path = "D:\PROGRAMMING\PythonCode\pypptx\image1.png" # 启动PowerPoint应用程序 ppt = Dispatch('PowerPoint.Applicatio
本篇文章將教你如何使用Python和PyQt5來建立一個GUI應用程式。PyQt5是一個相當流行的Python模組,透過這個文章你將學習如何使用它來建立一個互動式的應用程式。
這段程式碼假設您的XYZ資料存儲在名為"Sheet1"的工作表中的A1:Cn範圍內,其中n是資料行的數量。它將資料提取出來,然後在新建的工作表中按照網格的形式重新排列。
Vertexes和linedefs是構成doom關卡地圖的主要參數,在WAD的每個地圖區塊都會存放屬於該地圖的vertexes和linedefs。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
本篇文章適合和我一樣有這些旅行興趣的人❤️ 會在旅行中洗衣服 會住有廚房的住宿 有不厭其煩整理物品的習慣 想要穿的漂亮但又不想帶太多衣服 因為通常在歐洲旅行都是坐大眾運輸走跳,雖然想當背包客,但無法做到,只能盡力精簡行李。
Thumbnail
PyInstaller 是一個強大的工具,可以將 Python 程式碼打包成獨立的可執行檔案,讓你的程式可以在沒有 Python 解釋器的情況下運行。這對於分享和分發你的 Python 應用程式非常有用。以下是使用 PyInstaller 的基本步驟:
在去西班牙交換之前,寶拉把行李分為以下幾個類別進行打包/整理: 1.和電相關的東西 2.一般日用品 3.文具與文件 4.衣物 5.藥品 6.台灣食物 7.台灣文化交流用品 8.隨身包小要有的東西 9.後背包/書包要有的東西 寶拉會在每個項目以過來人的經驗告訴你原因,字很多大家請在有耐心的時候看
Thumbnail
搬家打包,想到滿屋子的東西要打包就累了嗎?是真的,打包很累,但是好好打包可以省大錢!隱藏版搬家省錢技法,變身打包達人就對了。千萬不要小看打包這件事,打包做得好,大車變小車、二車變一車,費用不囉唆,立馬省一半!也可以自己不動手,找優質專業的搬家公司提供專業代搬家打包服務,既省力氣也省銀子。沒聽懂?沒關
這世界有乾燥的可能嗎? 一兩個月前的夏天,我的一篇在文學獎被遺棄的散文,和一首被大家所珍惜但還沒被看到的詩有幸刊登在不同平台上。陸續而至,那時,我正在進行生命中發誓的最後一場勞動,收到消息時,我邊在電腦前工作邊流下了眼淚。 我一邊哭一邊懷疑自己是不是太誇張,可是,我想珍惜我的哭泣。來到這裡之後,所有
Thumbnail
搬家打包技巧,你學會了多少?不可不知的4個實用技巧! 搬家打包是面對搬家時一定會遇到的惱人問題,不管是學生搬離宿舍、因工作離鄉背景,又或者是購入新屋等各種情況。每次要搬家就會想到還要整理家裡的物品,然後東西累積了一大堆,全部整理裝箱真的會讓人忙翻天,而且還要煩惱這些東西該怎麼分類包裝等等。
Thumbnail
搬家打包衣服的秘訣,掌握這5個秘訣就能輕鬆搬家! 搬家打包本身就是件繁瑣的事情,但其中面對「搬家衣服整理」又是一件頭痛事,尤其是愛買衣服的女生們。今天就要來教大家搬家衣服打包的幾個小秘訣,讓你在面對衣物整理時更加有頭緒!
Thumbnail
所謂的「軟體」,在法律上稱之為「電腦程式」,可包括各種應用軟體,以及作業系統軟體。軟體在法律上的保護,包含著作權法、專利法、營業秘密法、刑法、積體電路電路佈局保護法,甚至涉及公平交易法等。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
本篇文章適合和我一樣有這些旅行興趣的人❤️ 會在旅行中洗衣服 會住有廚房的住宿 有不厭其煩整理物品的習慣 想要穿的漂亮但又不想帶太多衣服 因為通常在歐洲旅行都是坐大眾運輸走跳,雖然想當背包客,但無法做到,只能盡力精簡行李。
Thumbnail
PyInstaller 是一個強大的工具,可以將 Python 程式碼打包成獨立的可執行檔案,讓你的程式可以在沒有 Python 解釋器的情況下運行。這對於分享和分發你的 Python 應用程式非常有用。以下是使用 PyInstaller 的基本步驟:
在去西班牙交換之前,寶拉把行李分為以下幾個類別進行打包/整理: 1.和電相關的東西 2.一般日用品 3.文具與文件 4.衣物 5.藥品 6.台灣食物 7.台灣文化交流用品 8.隨身包小要有的東西 9.後背包/書包要有的東西 寶拉會在每個項目以過來人的經驗告訴你原因,字很多大家請在有耐心的時候看
Thumbnail
搬家打包,想到滿屋子的東西要打包就累了嗎?是真的,打包很累,但是好好打包可以省大錢!隱藏版搬家省錢技法,變身打包達人就對了。千萬不要小看打包這件事,打包做得好,大車變小車、二車變一車,費用不囉唆,立馬省一半!也可以自己不動手,找優質專業的搬家公司提供專業代搬家打包服務,既省力氣也省銀子。沒聽懂?沒關
這世界有乾燥的可能嗎? 一兩個月前的夏天,我的一篇在文學獎被遺棄的散文,和一首被大家所珍惜但還沒被看到的詩有幸刊登在不同平台上。陸續而至,那時,我正在進行生命中發誓的最後一場勞動,收到消息時,我邊在電腦前工作邊流下了眼淚。 我一邊哭一邊懷疑自己是不是太誇張,可是,我想珍惜我的哭泣。來到這裡之後,所有
Thumbnail
搬家打包技巧,你學會了多少?不可不知的4個實用技巧! 搬家打包是面對搬家時一定會遇到的惱人問題,不管是學生搬離宿舍、因工作離鄉背景,又或者是購入新屋等各種情況。每次要搬家就會想到還要整理家裡的物品,然後東西累積了一大堆,全部整理裝箱真的會讓人忙翻天,而且還要煩惱這些東西該怎麼分類包裝等等。
Thumbnail
搬家打包衣服的秘訣,掌握這5個秘訣就能輕鬆搬家! 搬家打包本身就是件繁瑣的事情,但其中面對「搬家衣服整理」又是一件頭痛事,尤其是愛買衣服的女生們。今天就要來教大家搬家衣服打包的幾個小秘訣,讓你在面對衣物整理時更加有頭緒!
Thumbnail
所謂的「軟體」,在法律上稱之為「電腦程式」,可包括各種應用軟體,以及作業系統軟體。軟體在法律上的保護,包含著作權法、專利法、營業秘密法、刑法、積體電路電路佈局保護法,甚至涉及公平交易法等。