桌面应用打包:pyinstaller

桌面,应用,打包,pyinstaller · 浏览次数 : 125

小编点评

**使用pyinstaller打包创建一个无需环境,双击即可运行的桌面应用程序** **1. 安装pyinstaller** * 使用pip安装pyinstaller:`pip install pyinstaller` **2. 生成.spec文件** * 使用pyinstaller的`pyinstaller -F -w -i`选项生成.spec文件。 * 其中: * `-F` 命令打包成单个文件 * `-w`选项允许用户选择创建桌面应用文件 * `-i`选项指定exe文件图标 **3. 使用.spec文件配置编译** * 使用`pyi-makespec`命令生成.spec文件,例如:`pyi-makespec -F start_dian.py`。 **4. 使用.spec文件编译程序** * 创建.spec文件后,可以使用`pyinstaller start_dian.spec`命令进行编译。 **5. 使用控制台运行程序** * 使用`pyinstaller -w`选项打包成可执行文件后,可以在控制台运行程序。 * 例如:`pyinstaller -w start_dian.py`将创建一个名为`start_dian.exe`的文件。 * 在运行程序之前,可以使用`os.system()`函数在控制台显示程序运行过程。 **6. 常见问题解决方案** * **多文件打包在.spec文件中:**使用`Analysis`参数添加导入模块名称,例如:`Analysis: ['start_dian.py']`。 * **exe文件过大安装虚拟环境:**使用`--hidden-imports`参数包含所有依赖文件。 * **出现莫名其妙错误:**检查程序执行路径是否正确,并使用`--dry-run`选项进行编译以查看错误信息。 * **文件路径问题:**使用`-p`选项指定目标路径,例如:`pyinstaller -p dist/ start_dian.py`。 * **运行后文件错误:**在运行程序后,使用`os.system()`函数在控制台显示程序运行过程。

正文

1 背景

在使用python开发一些小工具时,如果其他人电脑中没有python环境或者没有安装相应的第三方库,是没办法运行的,而要求对方安装又不现实,尤其是对方不是技术人员,因此如何将一个独立的python程序,使它成为成为一个不用考虑环境,双击即可运行的桌面应用呢?使用pyinstaller打包是一个不错的选择。

2 什么是pyinstaller

pyinstaller是一个支持跨平台使用的第三方库,它可以将脚本执行所需的模块和库,自动分析、收集并生成一个文件夹或者可执行文件。

以下示例使用windows环境,由于pyinstaller的跨平台性,与类unix环境命令一样,只是最终生成的可执行文件不一样。

3 如何安装

安装pyinstaller模块与安装其他python模块一样,使用pip命令安装即可。
pip install pyinstaller
安装输出结果:

其中的 altgraph、future等代表 PyInstaller 模块依赖环境。

4 如何使用

4.1 常用命令介绍

pyinstaller + 选项 + python入口源文件

主要选项包括:

  • -F 打包成一个exe文件(如果是多个py文件,下面有解决办法)
  • -D 自动创建一个包含桌面应用文件的目录,包括所有运行依赖文件(默认选项)
  • -w 指定程序运行时,不显示命令行窗口(仅对windows有效)
  • -i + ico路径 可以更换应用图标(如果是当前文件夹下,不用添加ico路径)
  • -d 产生debug版本的exe文件
  • -o 指定.spec文件生成目录,如果没有指定,将会在当前根目录下输出
  • -n 指定.spec文件名字,如果省略,主文件名将作为.spec的文件名字
  • -p 设置导入路径,可以使用路径分隔符(windows是分号,类unix是冒号)

4.2 常用方式举例

4.2.1 打包成单个文件

使用以下命令将会使python脚本,打包成为一个exe文件。
pyinstaller -F -w -i “./dian_128.ico” start_dian.py

其中:

  • -F 命令打包成单个文件
  • -w 无命令行窗口
  • -i 指定exe文件icon图标

执行成功后,将会在根目录生成两个文件夹,其中“build”文件中包含的是所有依赖文件,“dist”文件夹中存放着本次生成的exe文件。

4.2.2 打包成文件夹

使用以下命令将会使python脚本,打包成为一个文件夹。
pyinstaller -D -w -i “./dian_128.ico” start_dian.py

其中:

  • -D 命令打包成一个文件夹
  • -w 无命令行窗口
  • -i 指定exe文件icon图标

命令行执行成功后,将会在dist目录下生成一个start_dian的子目录,该目录中包含了大量的.dll文件和.pyz文件,都是exe文件的支撑文件。

4.3 使用.spec文件配置编译

上面讲解的都是通用版本,不太灵活,如果想要加入新的资源,或每次编译不想输入很长的命令,可以使用.spec文件,进行定制化配置编译。

4.3.1 生成.spec文件

使用上面的方式进行编译后,如未指定.spec生成目录,会在当前根目录生成一个与编译py文件同名的.spec文件;
或使用命令pyi-makespec -F start_dian.py,将会直接生成.spec文件;

4.3.2 spec文件内容介绍

打开spec文件

这里仅对涉及到的几个关键变量进行解释:

1.Analysis:

  • [‘start_dian.py’]:是主文件以及全部依赖文件,如果依赖文件都在同一目录下可以不写;
  • oathex:项目的绝对路径;
  • datas:添加资源文件,例如文件夹、图片、excel等等,以元组入参,第一个参数为原始路径,第二个参数为编译后的目标路径;

2.EXE:

  • console:是否开启命令行,默认为True(开启);
  • icon:编译出exe可执行文件产物的图标,必须使用绝对路径;
  • name:EXE内和COLLECT内的name都是编译后的文件名,默认与编译主文件同名;

4.3.3 spec文件编译

配置好的spec文件,执行命令进行编译,不再需要其他参数:
pyinstaller start_dian.spec

4.3.4 以下四种情况,修改spec文件比较好:

  1. 当您需要将资源文件与exe文件捆绑在一起时;
  2. 当您的依赖文件包括.dll或.so文件时;
  3. 当您运行exe需要运行参数时;
  4. 当您需要合并多程序包成为通用模块时;

5 常见问题

1.多文件如何打包

  • 在.spec文件中Analysis参数hiddenimports中添加导入模块名称,修改后,可再次进行打包,将会解决exe文件依赖包找不到的问题;
  • 在命令中使用-p 主文件 + -p 引入文件 …,可以直接生成exe文件。

2.exe文件过大

  • 安装python虚拟环境;
  • 导入包时,使用form + 包名 + import + 功能函数,不要直接import + 包名。

3.出现莫名其妙的错误

  • python文件所在的全路径,尽量不要有中文存在。

4.打包成一个文件夹后,发送给其他人无法使用

  • 需要将dist下面的文件夹整体发送,保持exe文件与dist下面文件夹的路径不变。

5.运行exe文件后,没有达到预期效果

  • 文件报错了,重新打包文件,使用控制台(去掉-w参数),将会在控制台显示程序运行过程与打印错误。

6.python脚本主要是命令行输出,但是程序执行完后就退出无法查看输出信息

  • 在python脚本最后一行添加命令:os.system(“pause”)或者raw_input(“输出任意按键即可退出”)。

作者:京东物流 骆铜磊

来源:京东云开发者社区 自猿其说Tech

与桌面应用打包:pyinstaller相似的内容:

桌面应用打包:pyinstaller

在使用python开发一些小工具时,如果其他人电脑中没有python环境或者没有安装相应的第三方库,是没办法运行的,而要求对方安装又不现实,尤其是对方不是技术人员,因此如何将一个独立的python程序,使它成为成为一个不用考虑环境,双击即可运行的桌面应用呢?使用pyinstaller打包是一个不错的选择。

C++获取商店应用(msix应用)桌面快捷方式的安装目录

传统应用的快捷方式目标指向可执行文件的路径,但是对于商店应用(也叫msix打包应用),则指向一个奇怪的字符串,使用IShellLink::GetPath获取路径时,则得到的是空字符串,而我们的最终目的是要拿到应用的安装路径,那该怎么办呢? 首先解释一下,那个奇怪的字符串叫AUMID(App User

【有奖调研】互联网新型社交,华为在找“元服务搭子”,快来集合!

“聊技术无话不谈,一起来吹吹元服务!畅聊你对元服务的想法,说不定,你就能撬动元服务的爆发增长!” 元服务(即原子化服务)是华为“轻量化”服务的新物种,可提供全新的服务和交互方式,让应用化繁为简,让服务触手可及!基于鸿蒙万能卡片,元服务可实现应用功能在桌面“永远打开”,实现智能推荐、服务直达! 而在元

【有奖调研】HarmonyOS新物种,鸿蒙流量新阵地——元服务邀你来答题!

“聊技术无话不谈,一起来吹吹元服务!畅聊你对元服务的想法,说不定,你就能撬动元服务的爆发增长!” 元服务(即原子化服务)是华为“轻量化”服务的新物种,可提供全新的服务和交互方式,让应用化繁为简,让服务触手可及!基于鸿蒙万能卡片,元服务可实现应用功能在桌面“永远打开”,实现智能推荐、服务直达! 而在元

修改Windows远程桌面3389端口

修改Windows远程桌面3389端口 Windows版本:windows10、Windows server 2016、2019(其他版本没有测过,应该也适用) 1、Windows桌面上,点击“开始-运行”或键盘按下“WIN+R”打开运行窗口,输入“regedit”,点击确定打开注册表编辑器。 2、

Windows server等保安全:账户锁定策略

Windows server等保安全:账户锁定策略 Windows版本:Windows server 2016、2019(其他版本没有测过,应该也适用) 1、Windows桌面上,点击“开始-运行”或键盘按下“WIN+R”快捷键打开运行窗口,输入“gpedit.msc”,点击确定打开“本地组策略编辑

桌面应用自动化WinAppDriver入门

桌面应用自动化WinAppDriver入门 关于winappdriver 介绍 WinAppDriver全称是Windows Application Driver,它提供了一些API,使得用户可以像selenium操作web一样来操作windows的应用程序 它支持的系统是Windows 10 (H

Flutter开发桌面应用的一些探索

在移动应用开发领域,Flutter已经赢得了广泛的认可和采用,成为了跨平台移动应用开发的瑞士军刀。然而,Flutter的魅力并不仅限于移动平台,它还可以用于开发桌面应用程序,为开发人员提供了一种全新的选择。本文将深入探讨Flutter在桌面应用开发中的应用,以及目前国内新颖的跨端开发技术。

浅谈基于Web的跨平台桌面应用开发

近些年来,跨平台跨端一直是比较热门的话题,因为跨平台方案的优势十分明显。对于开发者而言,可以做到一次开发,多端复用,一套代码就能够运行在不同设备上,今天我们聊聊桌面应用开发。

【保姆级教程】如何用Rust编写一个ChatGPT桌面应用

为什么我们需要一个桌面应用?原因实在太多,我们需要便捷地导出记录,需要在回答长度超长的时候自动加上“继续”,需要收藏一些很酷很实用的prompt...... (首先我假设你是一名如我一样习惯用IDEA开发的java仔)