说明
使用 pyinstaller 进行打包,会把当前使用的 Python 环境所带的包进行全部打包,虽然 pyinstaller 自带一些功能可以去除没有使用的包,但操作相对麻烦,这里并不讲述这种方法。本博客讲述使用 pipenv 来解决打包问题过大的方法,pipenv 是一款 Python 虚拟环境管理工具,它主要解决两方面的问题:
- requirements.txt依赖管理的局限
- 使用 requirements.txt 管理依赖的时候可能会出现版本不确定的构建问题。
- 多个项目依赖不同版本第三方工具的问题
- 例如,应用程序A需要特定模块的 1.0 版本但应用程序B需要该模块的 2.0 版本,当我们在A和B应用程序间切换时,需要不断检测、卸载、安装该模块。这意味着只安装一个版本的模块可能无法满足每个应用程序的要求,因此需要创建虚拟环境来将 A、B 应用程序所需的第三方工具包分隔开来。
打包过程
1.安装 pipenv
pipenv 的安装依赖于 pip,如果没有配置和安装好 pip,需要先安装 pip。如果系统中是 Python 3,那么可以直接使用 pip3 进行安装。
pip install pipenv
安装完成 pipenv 之后,就可以在命令行使用 pipenv 命令进行一系列操作。
2.pipenv 常用命令
Commands:
- check 检查安全漏洞
- graph 显示当前依赖关系图信息
- install 安装虚拟环境或者第三方库
- lock 锁定并生成Pipfile.lock文件
- open 在编辑器中查看一个库
- run 在虚拟环境中运行命令
- shell 进入虚拟环境
- uninstall 卸载一个库
- update 卸载当前所有的包,并安装它们的最新版本
例如
pipenv shell # 进入当前路径下的虚拟环境
Options:
- –where 显示项目文件所在路径
- –venv 显示虚拟环境实际文件所在路径
- –py 显示虚拟环境Python解释器所在路径
- –envs 显示虚拟环境的选项变量
- –rm 删除虚拟环境
- –bare 最小化输出
- –completion 完整输出
- –man 显示帮助页面
- –three / --two 使用Python 3/2创建虚拟环境(注意本机已安装的Python版本)
- –python TEXT 指定某个Python版本作为虚拟环境的安装源
- –site-packages 附带安装原Python解释器中的第三方库
- –jumbotron An easter egg, effectively.
- –version 版本信息
- -h, --help 帮助信息
例如
pipenv --venv # 显示虚拟环境实际文件所在路径
创建打包的虚拟环境
在命令行创建虚拟环境
使用命令
pipenv install
进行创建,会在当前创建目录下生成两个文本文件。
进入虚拟环境
使用命令
pipenv shell
进入虚拟环境,当前虚拟环境相当于拥有命令行功能和一个无第三方扩展库的 Python 环境,可以使用
pip list
进行查看已安装的包。
安装 pyinstaller
在虚拟环境中仍是使用 pyinstaller 进行打包,之不过通过虚拟环境,接下来可以安装项目依赖的那些包,对于项目不使用的包,可以不进行安装。
安装项目依赖包
- 可以使用 pip 命令进行逐个包的安装
- 或者导出项目依赖文件 requirements.txt 进行一键安装包,项目方法在此不再赘述。
进行打包
在虚拟环境中使用 pyinstaller 进行打包,通常在虚拟环境中进行打包的 exe 可执行文件会较之前文件会小很多,如果是对比 Anaconda 等环境会差别更大,并且运行速度也得到了很大提升。
pyinstaller 常用打包命令:
# 进行打包并配置图标
pyinstaller -F -i image.ico exam.py