首页 > 其他分享 >桌面应用打包:pyinstaller

桌面应用打包:pyinstaller

时间:2023-08-08 15:55:33浏览次数:37  
标签:文件 exe 桌面 python pyinstaller spec 打包

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

标签:文件,exe,桌面,python,pyinstaller,spec,打包
From: https://www.cnblogs.com/Jcloud/p/17614594.html

相关文章

  • python打包成sdk上传到私有仓库和使用
    我们已经学习了如何运行一个python项目(当我们有它的源码文件py文件的时候)。python的使用和运行我们有一个项目,需要打包到其他机器上运行,如果每次都是复制整个项目源码就显得有点笨拙。实现这个需求有很多种方案。例如:PyInstaller可参考链接:https://ningyu1.github.io/site/po......
  • 统计桌面上的不同数字
    给你一个正整数n,开始时,它放在桌面上。在109天内,每天都要执行下述步骤:对于出现在桌面上的每个数字x,找出符合1<=i<=n且满足x%i==1的所有数字i。然后,将这些数字放在桌面上。返回在109天之后,出现在桌面上的不同整数的数目。注意:一旦数字放在桌面上,则会一......
  • windows下cmake C++库打包成C方式导出
    背景windows下当前的一个项目使用的编译器是mingw,想要使用一个使用msvc编译出来的C++库。方法重新创建一个库,这个使用extern"C"方式导出函数,在函数中调用msvc编译出来的库。项目文件文件结构|--CMakeLists.txt|--floor_calibration||--include|||--floor_c......
  • FinClip 支持小程序维度域名配置;桌面端体验活动进行中
    FinClip的使命是使您(业务专家和开发人员)能够通过小程序解决关键业务流程挑战,并完成数字化转型的相关操作。不妨让我们看看在本月的产品与市场发布亮点,看看是否有助于您实现目标。产品方面的相关动向......
  • 【maven】maven 打包 deploy 项目时 出现 401 Unauthorized
    对这个问题的解决方法在maven插件中的setting.xml需要配置服务的授权信息<server><id>releases</id><username>admin</username><password>admin123</password></server><server><id>snapsho......
  • 你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序
    目录说明设置提醒时间,及休息时间久坐提醒倒计时休息提醒倒计时休息到计时代码说明主窗体设置工作到计时休息倒计时源码久坐提醒桌面小程序依赖库.NetFramework4.5HandyControl3.2网上下的一些小程序,达不到自己想要的效果,要么就是功能复杂,于是选择了自己开发。采用WPF......
  • 小米手机锁屏设置了密码,设置了指纹,但是锁屏无效,直接进入桌面,不需要输入密码或指纹
    问题:小米手机锁屏无效?小米手机锁屏设置了密码,设置了指纹,但是锁屏无效,直接进入桌面,不需要输入密码或指纹?小米手机防误触怎么设置?起因:手机放在口袋里,经常会误触。导致手机自动解锁,然后打开各种应用,比如:微信,和拼多多,然后莫名其妙自动下单,导致经常买了一些不需要的东西,东西收到......
  • 服务端apk打包教程
    本文我将给大家介绍一个apk打包工具VasDolly的使用介绍、原理以及如何在服务端接入VasDolly进行服务端打渠道包操作。使用介绍VasDolly是一个快速多渠道打包工具,同时支持基于V1和V2签名进行多渠道打包。插件本身会自动检测Apk使用的签名类别,并选择合适的多渠道打......
  • 记一次jenkins+maven+nexus3打包中遇到的问题
    过程:开发加了个新模块使用jenkins打包,报错如下: 总结就是maven-assembly-plugin模块的jar包没拉下来。去maven服务器查看了repo包情况,/data/maven/repo/org/apache/maven/plugins/maven-assembly-plugin/3.4.2发现果然没有对应jar包等,说明没拉下来。开发说明明把包上传到nexus......
  • Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面
    当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用户界面)编程,用Python也可以写出漂亮的桌面程序,建议此次课程大家稍作了解不要浪费太多时间,因为没有哪家......