前言
- 对于python为什么要打包成exe文件,是因为传输源文件以及源代码给他人是需要配置好一定的环境才能进行编译操作,而打包成exe文件就可以跟电脑软件一样打开就可以运行也可以分享给他人。但是打包好的exe文件并不是很方便去拆包,所以在打包前一定要测试之后在打包发布。
- 版本控制方面尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,但是只能在win64位系统运行。好了下面我将从安装pyinstaller开始介绍,然后是打包教程,最后是命令解释。
准备工作
pipenv简介
过去我们一般用 virtualenv
搭建虚拟环境,管理python版本,用 pip
进行包的管理。在虚拟环境激活状态下,可以安装所需的依赖包,安装的依赖包会保存至项目虚拟环境目录下,不会污染系统全局环境
virtualenv的使用存在一定的问题:
- 由于跨平台的使用不太一致,有时候处理包之间的依赖总存在问题。
- 可能需要手动安装/删除某些特定版本的包
- 存在多个环境(开发环境、测试环境、生产环境)时,依赖包目录文件
requirements.txt
会需要存在多个,无比繁琐 - 要定期更新
requirements.txt
,保持项目环境的一致性
pipenv
能够有效管理Python多个环境,各种包,相当于 virtualenv 和 pip 的合体,且更加强大。
pipenv主要有以下特性:
pipenv
集成了pip
,virtualenv
两者的功能,且完善了两者的一些缺陷。pipenv
会在项目目录下创建Pipfile
、Pipfile.lock
文件,管理包之间的依赖关系。virtualenv
需要将虚拟环境依赖包的导出为requirements.txt
, 一旦依赖包变动,就要重新导出,现在Pipfile
和Pipfile.lock
文件可以节省这些步骤,更方便地管理,查看依赖关系是十分方便。- 各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。。
- 通过加载
.env
文件简化开发工作流程。 - 便于
docker容器化管理
,Pipfile
文件支持生成requirements文件
,便于项目代码docker化管理
,另外,pipfile
还支持v–dev环境,可以在调试阶段安装许多调试工具等,而不影响生产环境的环境。 - 无需激活虚拟环境执行代码,只要有
pipfile
文件即可使用虚拟环境的依赖包执行python脚本,如:通过执行命令pipenv run python xx.py
。 - 支持Python2 和 Python3,在各个平台的命令都是一样的。
1
安装pipenv
pip install pipenv
2
检查是否安装成功
pipenv --version
能看到版本号,说明安装成功。
pyinstaller简介
PyInstaller 是一个在 Windows、GNU/Linux、macOS、FreeBSD、OpenBSD、Solaris 和 AIX 下将 Python 程序冻结(打包)为独立可执行文件的程序。与类似工具相比,它的主要优点是 PyInstaller 与 Python 3.7-3.10 一起工作,由于透明压缩,它构建了更小的可执行文件,它是完全多平台的,并使用操作系统支持加载动态库,从而确保完全兼容。 [2
pyinstaller命令参数详解
进入pipenv虚拟环境
pipenv shell
如下图所示,虚拟环境创建成功:
安装项目所需依赖包
pip install lxml pip install requests pip install bs4
最后在安装pyinstaller,因为我们这个是虚拟环境,所以需要在虚拟环境内安装pyinstaller包
pip install pyinstaller
安装完pyinstaller后再次使用pyinstaller命令打包我们的Python项目即可。
pyinstaller -w -i 图标.ico -F xxx.py
ps:-w 代表取出终端窗口,-i 表示设置程序显示 图标,-F 表示需要打包的xxx.py文件
如图所示,出现 complateed successfullly 说明打包成功。
然后再使用如下命令清理留在c盘的环境,避免占用磁盘存储空间
pipenv --rm
打包好的exe在项目的dist目录下,可以看到占用大小还是很小的~