一.安装环境
1.1安装python环境
python官网地址:https://www.python.org/downloads/windows/
高能总结:
1.python环境安装务必安装python3+版本,强烈建议去官网下载安装包(window、mac),以避免环境变量的配置、运行中各种奇怪异常;
2.安装包需要安装3.8.X的版本;如果安装的是3.10.X版本,经测试发现在安装打包环境时提示包版本问题,导致报错、、、,未减少麻烦,所以直接安装3.8.X版本;
python的安装过程,一路下一步即可(安装过程中注意勾选添加的环境变量复选框)。
1.2检查python环境是否安装成功;
python -V #会打印python的版本号信息说明安装成功
1.3安装虚拟环境
pip install pipenv
1.4建立虚拟环境
pipenv install
1.5进入虚拟环境(上一步可省略,因为没有虚拟环境的话会自动建立一个)
pipenv shell
1.6安装项目中依赖的模块
pipenv install moviepy requests opencv-python Pillow np
1.7打包的模块也要安装
pipenv install pyinstaller
::: block-1
高能总结:
为什么需要安装虚拟环境?
1.避免依赖冲突:虚拟环境允许您在不同的项目之间隔离依赖关系。这可以防止不同项目所需的依赖项之间的冲突,确保每个项目都可以在其自己的环境中正常工作。在将应用程序打包为可执行文件时,确保它只包含了项目所需的依赖项,而不是系统范围的依赖项。
2.版本控制:虚拟环境使您能够控制项目所使用的 Python 版本。这对于确保应用程序在不同的 Python 版本下都能正常工作非常重要。当您打包应用程序为可执行文件时,可以明确指定要使用的 Python 版本,以确保兼容性。
3.减小可执行文件大小:如果您在虚拟环境中只安装了项目所需的依赖项,那么打包生成的可执行文件通常会更小,因为它只包含了必要的文件和库。这可以减小可执行文件的大小,使其更容易传输和部署。
4.清晰的项目结构:使用虚拟环境可以保持项目结构的清晰和整洁。您可以将所有项目相关的依赖项隔离在一个目录中,使项目更容易维护和管理。
5.更好的可移植性:通过将虚拟环境与打包工具一起使用,您可以创建一个独立于系统的可执行文件,这意味着您可以在不同的操作系统上运行它,而不必担心依赖项问题。
:::
二.打包
pyinstaller -F -c main.py
或者
pyinstaller main.spec
::: block-1
解释:
main.py 是你的代码入口文件;
-c 表示exe运行时需要打开一个黑窗口;
首次运行时可以使用
pyinstaller -F -c main.py
命令,每次运行该命令都会重新生成一个xxx.spec配置文件。如果已经存在xxx.spec配置文件,就用
pyinstaller xxx.spec
命令,原因是xxx.spec文件中可能已经添加了已经配置好的东西,无需在命令行中添加各种打包配置了;
常用参数 含义
-i 或 -icon 生成icon
-F 创建一个绑定的可执行文件
-w 使用窗口,无控制台
-C 使用控制台,无窗口
-D 创建一个包含可执行文件的单文件夹包(默认情况下)
-n 文件名
:::
资源目录的配置
pyinstaller 工具打包时默认只会打包项目中的py文件,但实际项目中可能存在其它文件例如,images文件夹、audios文件夹、其它资源文件夹,这类文件夹不配置的话,在运行exe时会提示找不到目录;
修改xxx.spec文件的datas,举例,在源码中的main.py文件同级目录下存在两个资源文件夹images、audios,里面分别存放图片、音频,配置如下配置:
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[(".\\images\\*.*",'.\\images'), ('.\\audios\\*.*', '.\\audios')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
datas是一个列表,可以配置多个目录,每一个目录都要用小括号包裹起来,注意windows中使用的是反斜杠;
如果打包后的dist文件夹中没有images、audios(与xxx.exe可执行文件同级)文件夹,此时手动新建这两个文件夹即可。
高能总结:以上打包过程中遇到两个坑,第一个是必须用3.8.X版本的python否则安装pyenv时提示找不到python3.8环境;第二个是资源包无法自动新建,此时需要手动新建资源包;