1.背景在实际工作过程中python项目文件完成开发后存在打包成exe使用的需求而如何正确并且快捷的实现打包尤为重要目前python打包的方式很多包括py2exepyinstallercx_Freezenuitka以及Pyarmor本次只针对pyinstaller进行说明。PyInstaller是一个用于将Python应用程序打包成独立可执行文件的库。它可以将Python代码及其所有依赖项包括第三方库和资源文件打包到一个单独的可执行文件中使得应用程序可以在没有Python解释器环境的系统上独立运行。2.特点以下是PyInstaller的一些主要特点和功能跨平台支持PyInstaller可以在主流操作系统如Windows、macOS和Linux上运行并生成相应平台的可执行文件自动化打包PyInstaller会分析Python代码及其依赖项自动检测所需的模块和资源文件并将它们打包到一个可执行文件中独立可执行文件打包后的可执行文件包含了应用程序的所有依赖项不需要用户单独安装Python解释器或相关库支持多种打包选项PyInstaller提供了多种打包选项可以定制可执行文件的行为如设置命令行参数、图标、文件路径等支持多种GUI框架PyInstaller支持常见的GUI框架如Tkinter、PyQt、wxPython等可以将基于这些框架开发的应用程序打包为独立可执行文件3.打包方式3.1单文件打包法单个文件内容直接使用pyinstaller命令打包打包后自动生成exe运行文件使用。# 1.执行命令pyinstaller-F xxx.py# 2.去生成的dist文件夹找xxx.exe运行# 3.运行成功xxx.exe则为可执行文件删除其它文件3.2多文件打包法当存在多个文件时需要指定好程序入口文件使用pyinstall -D后生成spec文件修改spec文件再使用pyinstaller -F打包。# 1.执行命令xxx.py为程序入口文件pyinstall-D xxx.py# 2.删除生成的bulid和dist文件夹,仅保留xxx.spec文件# 3.修改xxx.spec文件,详见2.2.1# 4.执行命令pyinstaller-F xxx.spec# 5.去dist文件夹下找xxx.exe文件# 6.运行成功删除临时文件目录builddist目录为打包的结果可执行文件和其它程序运行的关联文件都在这个目录下3.3配置文件打包法最为简单此种方法最为直接简单先生成spec配置文件然后修改文件后直接使用pyinstaller命令打包。#第一步生成配置文件 pyi-makespec XXX.py 获取spec配置 #第二步修改配置文件 #第三步打包命令 pyinstaller XXX.spec打包过程如图打包成功结果如图4.SPEC配置文件以下是spec配置文件还可以直接按照文件内容提示填入所需文件名、打包名称等从而更为简单的使用pyinstaller XXX.spec完成打包。# -*- mode: python ; coding: utf-8 -*-block_cipherNoneaAnalysis([PY主文件,PY1辅助文件,PY2辅助文件,PY3辅助文件,],pathex[多个PY文件所在路径],binaries[],# 程序调用外部pyd、dll文件二进制文件路径以数组形式传入datas[],# 存放的资源文件hiddenimports[],# pyinstaller解析模块时可能会遗漏某些模块hookspath[],hooksconfig{},runtime_hooks[],excludes[],win_no_prefer_redirectsFalse,win_private_assembliesFalse,cipherblock_cipher,noarchiveFalse,)pyzPYZ(a.pure,a.zipped_data,cipherblock_cipher)exeEXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,[],name修改EXE的文件名,debugFalse,bootloader_ignore_signalsFalse,stripFalse,upxTrue,upx_exclude[],runtime_tmpdirNone,consoleTrue,disable_windowed_tracebackFalse,argv_emulationFalse,target_archNone,codesign_identityNone,entitlements_fileNone,)5.拓展对提到的五种打包库进行以下简单介绍py2exe:跨平台支持有限主要用于将Python脚本打包为Windows可执行文件简单易用配置相对简单适合简单的打包需求可以将Python解释器和依赖项打包到单个可执行文件中PyInstaller:跨平台支持广泛可以生成Windows、macOS和Linux等系统上的可执行文件自动化打包能够自动检测和包含所有依赖项支持多种GUI框架如Tkinter、PyQt、wxPython等可以生成独立的可执行文件无需安装Python解释器cx_Freeze:跨平台支持可以生成Windows、macOS和Linux等系统上的可执行文件配置灵活可以根据需求进行定制支持多种GUI框架和第三方库生成的可执行文件较小具有较小的内存占用Nuitka:将Python代码编译为机器码提高执行效率生成的可执行文件性能较高执行速度比解释执行的Python代码更快与许多第三方库和C扩展兼容跨平台支持广泛可以生成Windows、macOS和Linux等系统上的可执行文件Pyarmor:用于保护Python代码提供加密和混淆功能以防止未经授权的访问和复制支持对Python脚本进行防调试和防反向工程处理配置简单可以与其他打包工具结合使用跨平台支持可以在不同系统上使用这些工具在Python打包和分发方面都有其独特的特点和适用场景选择合适的工具取决于我们的具体需求例如目标平台、代码保护需求、对第三方库的支持程度以及打包后的可执行文件的性能要求等。