问题
打包一个只有两个常用库的超短的代码,打包后的 exe 文件竟然有几百兆
解决
感觉应该是环境问题,将没用的包打包进去了,因此建立工程环境只安装需要的包,有点怀念 NodeJS的 package.json
# 安装pipenv
pip install pipenv
#建立虚拟环境
pipenv install
#进入虚拟环境(上一步可省略,因为没有虚拟环境的话会自动建立一个)
pipenv shell
# 随时查看安装的包
pip list
#安装模块
pip install .py里安装的模块
#打包的模块也要安装,否则会调用原有的库依旧会关联很多无用库
pip install pyinstaller
# 打包
pyinstaller -F .py文件路径
# 退出虚拟环境
exit
# 删除虚拟环境
pipenv ––rm
踩坑 pandas、openpyxl
pyinstaller
打包指定模块hidden import
- 方法一
命令行中携带参数
# 有pandas的打包方式,否则会缺少依赖包
pyinstaller -F -w --hidden-import pandas --hidden-import="pandas._libs.tslibs.timedeltas" --hidden-import="pandas._libs.tslibs.np_datetime" --hidden-import="pandas._libs.tslibs.nattype" --hidden-import="pandas._libs.skiplist" .py文件路径
pyinstaller main.py --hidden-import openpyxl.cell._writer
- 方法二
在PyInstaller\hooks
的目录下新建文件hook-pandas.py
hiddenimports=[
#all your previous hidden imports
'pandas', 'pandas._libs.tslibs.timedeltas', 'pandas._libs.tslibs.np_datetime', 'pandas._libs.tslibs.nattype', 'pandas._libs.skiplist'
]
然后执行 pyinstaller -F .py文件路径
- 方法三
pyinstaller .py文件
打包时会自动生成XX.spec
,类似NodeJS的 package.json,新建或者修改spec文件中的hiddenimports
,然后pyinstaller .spec文件
打包
a = Analysis(['main.py'],
pathex=['/project-folder'],
binaries=[],
datas=[],
hiddenimports=[
'pandas', 'pandas._libs.tslibs.timedeltas', 'pandas._libs.tslibs.np_datetime', 'pandas._libs.tslibs.nattype', 'pandas._libs.skiplist',
'openpyxl','xlrd','xlswriter','openpyxl.cell._writer'],
hookspath=[],
runtime_hooks=[],
excludes=[],
cipher=block_cipher)
总结
使用 Linux 时安装环境时很小心,在win下有点放飞自我不受控制了,现实教我做人
参考文章: