pyinstaller是一个第三方库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个 独立文件方便传递和管理。
PyInstaller支持Python 2.7和Python 3.3+。可以在Windows、Mac OS X和Linux上使用,但是并不是跨平台的,而是说你要是希望打包成.exe文件,需要在Windows系统上运行PyInstaller进行打包工作;打包成mac app,需要在Mac OS上使用。
一、安装
pip install pyinstaller
该命令会将所需要的依赖安装到python安装目录的script文件夹中,如果你安装python时已经配置了python的环境变量,应该会有script文件夹的环境变量配置,可以直接在cmd中使用pyinstaller命令
环境变量示例:C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Scripts\
二、参数帮助
可选参数 | 描述 |
---|---|
-F | 生成单个的可执行文件 |
-h | 查看该模块的帮助信息 |
-v | 查看该模块的版本信息 |
-D | 创建一个包含可执行文件的单文件夹捆绑包 |
-n | 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
-d | 产生 debug 版本的可执行文件 |
-w | 指定程序运行时不显示命令行窗口(仅对 Windows 有效) |
-c | 定使用命令行窗口运行程序(仅对 Windows 有效) |
-o | 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件 |
三、生成可执行文件
pyinstaller -F -w main.py
main.py就是程序启动的类,自行替换
打包完成后会在当前目录下生成两个目录和一个spec文件
分别是build、dist、main.spec
其中dist保存了打包后的可执行文件,spec则是打包时可选的配置文件
四、打包资源文件
打包后可执行文件中只有.py文件,程序中的配置文件和资源文件都没有,需要通过spec将所需要打包的文件配置进去。
sepc中datas选项即为配置文件映射,其格式为[(‘源文件’,’打包后的目录’),(‘源文件’,’打包后的目录’)]
我的根目录中有两种类型的文件需要打包,我们创建一个数组如下:
resource_data = [
('*.json','.'),
('*.yml','.')
]
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=resource_data,
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
5、访问打包后的资源文件
打包后的文件无法直接访问,需要使用特定的访问路径,我们写一个方法传入一个路径返回打包后的真实路径,并判断是否为打包后的文件,如果是则使用打包后的路径如果不是则使用当前路径
def resource_path(self, relative_path):
if getattr(sys, 'frozen',False): #是否Bundle Resource
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path,relative_path)
6、重新打包有资源文件后的可执行文件
配置完成后我们直接使用spec的配置进行重新打包可执行文件中就有资源文件了
pyinstaller main.spec