解决pyinstaller打包exe文件过大的问题

问题

打包一个只有两个常用库的超短的代码,打包后的 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

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\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文件路径

总结

使用 Linux 时安装环境时很小心,在win下有点放飞自我不受控制了,现实教我做人


参考文章:

  1. pipenv的安装和使用
  2. pyinstaller打包后程序体积太大,如何解决?
  3. pyinstaller踩坑无极限-No module named ‘pandas._libs.tslibs.timedeltas
  4. pyinstaller深入使用,打包指定模块,打包静态文件
  5. Pyinstaller 中 pandas出错问题的解决(详细)
  6. 如何使得 python 脚本 不一闪而过

你可能感兴趣的:(僧旅,python,开发语言,后端)