
文章目录安装 pyinstaller 模块pyinstaller 的使用pyinstaller 常用参数单文件打包多文件打包指定 exe 文件图标打包 python 文件依赖的资源文件图片、音乐等1、在打包文件加入以下代码2、生成 .spec 配置文件3、修改 .spec 配置文件3、打包文件4、运行打包后文件设置界面图标跟任务栏图标报错缩小生成的 exe可执行文件大小安装 pyinstaller 模块pip install pyinstaller-i https://pypi.tuna.tsinghua.edu.cn/simple在 pyinstaller 模块安装成功之后在 Python 的安装目录下的 Scripts 目录下会增加一个 pyinstaller.exe 程序接下来就可以使用该工具将 Python 程序生成 EXE 程序了。pyinstaller 的使用pyinstaller 需要在命令行下使用如果 pyinstaller.exe 所在目录没有加入环境变量pyinstaller 安装成功后会有下图提示并显示 pyinstaller.exe 所在绝对路径后续在使用的时候需要带上绝对路径pyinstaller 常用参数在命令行如果不加参数默认添加 参数-Dpyinstaller.exe test1.py# 默认添加 参数 -D参数说明-F产生单个的可执行文件使用此参数将会在脚本目录下生成一个 dist 目录并在该目录下看到有一个 app.exe 文件该 app.exe 文件可以单独运行-D产生一个目录包含多个文件作为可执行程序使用此参数将会在脚本目录下看到多了一个 dist 目录并在该目录下看到有一个 app 子目录在该子目录下包含了大量 .dll 文件和 .pyz 文件它们都是 app.exe 程序的支撑文件该 app.exe 文件不能单独运行-w指定程序运行时不显示命令行窗口仅对 Windows 有效-c指定使用命令行窗口运行程序仅对 Windows 有效单文件打包Pyinstaller name.spec# 1、以 spec 文件进行打包Pyinstaller name.py# 2、以 py 文件进行打包多文件打包多文件打包和单文件相同只需要保证含有主函数的脚本能正确运行其他依赖文件就可以省略pyinstaller.exe test1.py# 只需要跟带主函数的脚本其他依赖文件可以省略指定 exe 文件图标pyinstaller -F -w main.py -i logo图片地址.ico打包 python 文件依赖的资源文件图片、音乐等1、在打包文件加入以下代码importosimportsys# 资源文件目录访问defsource_path(relative_path):# 是否Bundle Resource打包# 判断是否存在属性frozen以此判断是打包的程序还是源代码。false为默认值即没有frozen属性时返回falseifgetattr(sys,frozen,False):base_pathsys._MEIPASS# 该属性也是打包程序才会有源代码尝试获取该属性会报错else:# 当源代码运行时使用该路径# os.path.abspath()函数是用来获取绝对路径的函数它可以将相对路径转换为绝对路径。base_pathos.path.abspath(.)returnos.path.join(base_path,relative_path)# 修改当前工作目录使得资源文件可以被正确访问cdsource_path()os.chdir(cd)getattr()getattr() 是 Python 内置的一个函数可以用来获取一个对象的属性值或方法。其基本语法为getattr(object, name[, default])object 是要获取属性值或方法的对象name 是要获取的属性名或方法名default 是可选参数当指定的属性或方法不存在时会返回 default 的值。Python中 sys._MEIPASS 是什么用 pyinstaller 打包生成的 exe 文件在运行时动态生成依赖文件sys._MEIPASS 就是这些依赖文件所在文件夹的路径通常C:\Windows\Temp\_MEIxxxx或C:\Users\用户名\AppData\Local\Temp\_MEIxxxx2、生成.spec配置文件这里打包的主函数入口文件不能定义为main.py否则影响后面的图标设置pyi-makespec-F-w musicplayer.py# musicplayer 是主程序的 musicplayer.py名字#[-F/-D] # [产生当个可执行文件/产生一个目录包含多个文件作为可执行文件]#[-w/-c] # [去掉命令行弹窗/显示命令行弹窗]3、修改.spec配置文件1、 修改修改datas项此列表内可以加入一个元组注意此元组最多可以有两个元素指定要打包的资源和打包后在临时文件夹内的文件夹名称。比如“datas[(‘res’,‘res’)]”第一个res代表需要打包的文件夹名res其内部存放的全都是各种资源文件。第二个’res‘代表打包后在临时文件中的文件夹名称。本地引用资源路径时就需要使用相对路径datas[(load,load)],icon[load\\图标.ico],3、打包文件pyinstaller musicplayer.spec在pycharm中打包路径不能有中文: raise Exception(fQt plugin directory ‘{plugin_src_dir}’ does not exist!)Exception: Qt plugin directory ‘C:/Users/¶ÅÇì¶«/PycharmProjects/ú̿¼ì²âÊýÖµ´¦Àí³ÌÐò/venv/lib/site-packages/PyQt5/Qt5/plugins’ does not exist!使用python打包程序时因含中文名报错在pycharm中 pyinstaller 打包 win32ctypes.pywin32.pywintypes.error: (225, ‘’, ‘无法成功完成操作因为文件包含病毒或潜在的垃圾软件。’)将pyinstaller 6.3.0卸载后安装6.2.0重新打包即可pip install pyinstaller6.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple4、运行打包后文件程序运行时就会在临时文件夹下创建响应的文件夹并在里面添加资源文件设置界面图标跟任务栏图标在 PyQt 中你可以使用 pyrcc 工具将 .qrc 文件编译为 Python 模块然后将这个模块导入到你的程序中从而设置应用程序图标和任务栏图标。首先你需要创建一个 .qrc 文件该文件应该包含应用程序图标和任务栏图标的资源。例如你可以创建一个名为 “icons.qrc” 的文件包含以下内容“icon.png” 是你想要设置的应用程序图标和任务栏图标的文件名。!DOCTYPE RCCRCC version1.0qresourcefileicon.png/file/qresource/RCC使用 pyrcc 工具将 .qrc 文件编译为 Python 模块。在命令行中输入以下命令pyrcc5 icons.qrc -o icons_rc.py“icons_rc.py” 是你想要指定的 Python 模块文件名。如果报错pyrcc5‘ 不是内部或外部命令也不是可运行的程序 或批处理文件。先执行pip install PyQt5-tools-i https://pypi.tuna.tsinghua.edu.cn/simple再执行pyrcc5 icons.qrc-o icons_rc.py完成编译后你应该能够在应用程序的根目录中找到一个名为 “icons_rc.py” 的文件。这个文件包含了你在 .qrc 文件中定义的资源。接下来在你的 PyQt 程序中你可以使用以下代码来设置应用程序图标和任务栏图标fromPyQt5.QtGuiimportQIconimportctypesimporticons_rc# 导入编译后的 .qrc 文件appQApplication(sys.argv)app.setWindowIcon(QIcon(:/icon.png))# 设置应用程序图标# 设置任务栏图标my_app_idmy_company.my_product.sub_product.version# 替换为你的应用程序 ID(可以不改)ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(my_app_id)“:/icon.png” 是从编译后的 .qrc 文件中加载图标的语法。报错缩小生成的 exe可执行文件大小可执行文件大小和使用的python版本有关亲测同样的代码和模块使用3.10.11版本生成文件大小未 20M左右使用3.9.13版本生成文件大小未 7M左右返回 Python专栏目录及索引