pyinstaller打包减小体积以及一些技巧小记
导语
在使用pyinstaller进行程序打包的时候会发现明明程序本身不打,打包出来却达到几百兆的情况,这是因为打包环境有很多不必要的包导致的,因此如果我们用一个纯净的环境打包,体积就会小很多,本文介绍如何使用virtualenv来做打包减小体积以及一些其他技巧
step1 安装virtualenv
直接pip安装virtualenv即可
step2 使用virtualenv创建纯净环境
在任意文件夹下(推荐项目文件夹)执行命令
virtualenv pyinstallerenv
其中 pyinstallerenv 是自己命名的环境名称,该创建方式默认会以当前python为基础创建环境,另外也可指定python,使用下面命令
virtualenv -p /usr/bin/python38 my_project_env
创建完成后该路径下会创建一个以刚刚新环境命名的文件夹
step3 激活纯净环境
ubuntu
进入例如 ./pyinstallerenv/bin中执行命令
source ./activate
windows
进入例如 ./pyinstallerenv/Scripts 中执行命令
activate
以上两种方式均会发现当前shell命令行前会有一个(pyinstallerenv),表示现在已经激活环境
step4 打包
接下来安装pyinstaller以及自己项目的依赖库,然后进行正常打包操作即可
注意事项
linux
在linux下打包程序直接双击是无法显示命令行的
方法一:
手动创建一个desktop指定打开命令行,这样才可以双击运行带命令行的程序,原因如下
https://github.com/pyinstaller/pyinstaller/issues/3171
随便创建一个文件,输入以下内容
[Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application Terminal=true Exec=/home/cyh/workspace/SLAVE/cyh_dev/xuxiaoli/battery/dist/charge_test Name=charge_test.desktop #Icon=/path/to/icon
Exec是可执行程序位置,Name是该启动方式名称,Terminal=true表示开启命令行
方法二
python直接命令调出终端,例如下面命令:
import os cmd = 'ls' full_cmd = f"gnome-terminal -e 'bash -c \"{cmd}; exec bash\"'" os.system(full_cmd)
再记录下windows下调终端的方法(pyinstaller在windows下可以默认打开命令行,此处只是做记录)
import os cmd = 'dir' full_cmd = 'start cmd /k ' + cmd os.system(full_cmd)
windows
windows打包需要使用命令行交互的工具(没有前端),需要注意如果windows的cmd中选项--快速编辑模式打开的情况下,左键点击窗口,会堵塞程序的标准输出(原因可能是快速编辑模式夺取了窗口的标准输出之类的权限),因此可能会看到程序卡住的情况,这时候在窗口点一下右键即可恢复运行