桌面应用打包:pyinstaller | 京东物流技术团队
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文件比较好:
- 当您需要将资源文件与exe文件捆绑在一起时;
- 当您的依赖文件包括.dll或.so文件时;
- 当您运行exe需要运行参数时;
- 当您需要合并多程序包成为通用模块时;
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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
服装行业多模态算法个性化产品定制方案 | 京东云技术团队
一、项目背景 AI赋能服装设计师,设计好看、好穿、好卖的服装 传统服装行业痛点 • 设计师无法准确捕捉市场趋势,抓住中国潮流 • 上新周期长,高库存滞销风险大 • 基本款居多,难以满足消费者个性化需求 解决方案 • GPT+数据洞察,快速反应市场时尚流行趋势 • 柔性快反+数智化供应链,降低库存成本 • AIGC,降低设计门槛,人人都可以是设计师 二、方案介绍 • 传统服饰设计方案:设计师根据经验直接出图——好看、好穿 • 设计师+diffusion:AIGC海量出图,设计师选图——好看 • 新视界设计:畅销服装版型+潮流图样,设计好看、好穿、好卖的服装 三、技术突破 畅销服装版式数据库构建 • 自研服装识别模型对服装图片进行多模态智能分析,提取服装图片的纹理、面料、廓形等多维度版式信息,结合服装销售评论数据,构建服装版式数据库 生成个性化服装图片 • 基于自研架构tailor diffusion根据服装版式信息将语义信息映射到视觉隐空间,通过多个维度的版式特征控制生成指定款型的服装设计图 模特着装展示 • 特征空间融合服装、模特图片信息,将个性化服装穿着在模特身上,直观展示定制服...
- 下一篇
R2在全渠道业务线的落地 | 京东云技术团队
随着业务的增长,系统的高频率迭代,质量保障工作迫切需要引入更加科学高效的测试方法来助力业务高质量的交付。长城项目一期测试中,全渠道质量团队引入技术平台部R2技术,极大的提升了项目交付的质量。因此,本文将重点介绍全渠道质量团队是如何利用R2来保障业务质量的。 一、为什么引入R2? 全渠道长城项目是将全渠道现有交易能力下沉至交易中台,在技术系统层面实现了线上线下系统深度一体化,为零售的全渠道技术(人通、货通、场通、数据通)奠定了基石,贯穿从全渠道门店、商品、采购、促销、优惠券、通用下单、支付到售后的整个订单生命周期。项目涉及改动的应用多达27+,接口300+,业务范围极广。如果完全依赖传统的人工测试,那么在有限的时间内,不仅需要投入大量人力,同时也很难保证每次迭代回归覆盖了所有业务场景,最终也会影响项目交付的质量。 因此,为了更加全面的有效的覆盖线上的所有业务场景,全渠道质量团队调研了适用于长城项目改造前后数据对比的平台工具,最后在多种工具中选择了技术平台部的R2工具。R2的全称是Record和Replay,即录制和回放。测试同事与R2团队沟通试用后,发现它是一款非常适合于大型项目大量数据...
相关文章
文章评论
共有0条评论来说两句吧...