You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

控制含pandas的PyInstaller构建体积:Windows10单文件exe制作

缩小PyInstaller打包pandas单文件exe体积的实用技巧(Windows10)

我之前也踩过PyInstaller打包带pandas、numpy的脚本时体积爆炸的坑,折腾了好几种方法,整理出几个亲测有效的优化思路,帮你把动辄几百MB的exe瘦身下来:

1. 用干净的虚拟环境隔离依赖

全局Python环境里往往装了一堆没用的包(比如matplotlib、scipy这些pandas的可选依赖),PyInstaller会一股脑把它们都打包进去。先建个只装必要依赖的虚拟环境:

# 创建虚拟环境
python -m venv pandas_venv
# Windows cmd下激活环境
pandas_venv\Scripts\activate.bat
# 只装脚本需要的包
pip install pandas numpy pyinstaller

用这个环境打包,能直接砍掉很多冗余的依赖文件,效果立竿见影。

2. 手动排除不必要的模块

pandas和numpy自带很多你根本用不上的子模块,比如测试模块、可选IO扩展,直接在打包命令里排除它们:

pyinstaller --onefile --exclude-module matplotlib --exclude-module scipy --exclude-module sklearn --exclude-module pandas.testing TrivialTest.py

你可以根据自己的实际情况调整排除的模块——只要脚本里没用到的,都可以大胆排除。

3. 用UPX给exe做终极压缩

UPX是个专门压缩可执行文件的工具,能把exe体积再砍一半左右,PyInstaller直接支持调用它:

  1. 先下载Windows版UPX,解压后把upx.exe放到系统环境变量的路径里(或者记下它的路径);
  2. 打包时加上UPX参数:
# 如果UPX在环境变量里,直接用--upx参数
pyinstaller --onefile --upx TrivialTest.py
# 或者指定UPX路径
pyinstaller --onefile --upx-dir "C:\your\upx\folder" TrivialTest.py

注意:有些杀毒软件可能会把UPX压缩的文件误报成病毒,测试时可以暂时添加信任。

4. 清理PyInstaller缓存

PyInstaller会缓存之前的打包文件,有时候缓存里会残留冗余内容,打包前加上--clean参数清一下:

pyinstaller --onefile --clean TrivialTest.py

5. 按需导入(可选)

如果你的脚本只用到pandas的少数功能,可以试试按需导入代替全量导入,虽然对体积的影响不如前几个方法大,但聊胜于无:

# 代替 import pandas as pd
from pandas import DataFrame, MultiIndex, date_range
from pandas import to_csv

不过这么做要注意测试,避免漏掉隐式依赖导致exe运行报错。

一般来说,把虚拟环境+排除模块+UPX压缩这三个方法组合起来,就能把体积从几百MB降到100MB以内(具体大小取决于pandas和numpy的版本),亲测有效!

内容的提问来源于stack exchange,提问作者feetwet

火山引擎 最新活动