PyInstall的安装,使用,以及最后打包成一个exe文件

简介: PyInstall的安装,使用,以及最后打包成一个exe文件

首先PyInstall安装

pip3 install pyinstaller -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com


打包常用命令

pyinstaller -w -F test.py

-w 表示运行exe文件后不出现cmd命令窗口

-F 表示打包成一个单独的exe文件

使用命令后会生成两个文件夹。



生成的exe文件会存放在dist文件夹下面。并且生成的同目录级别的spec是中间文件,不用太关心。

打包成单个exe文件,并包含其它静态资源


这块可是费劲心思,采用了很多方法都以失败告终。我以最简单的方式来解释。最后的最后讲原理。


我们先生成上面讲到的中间文件 .spec

pyi-makespec XXXXX.py

你看我这里需要的静态资源放在 resources目录下


这时候,修改中间文件,.spec,添加datas里面的数据,把当前目录的resources文件夹的内容 包含进去,命名为 resources。


同时也要注意修改console=False防止出现黑窗口


那我们代码应该怎么使用呢?保证打包前和打包后都能正常运行


我引用路径是这么引用的


添加了resource_path方法如下

def resource_path(relative_path):
    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

原理解释:

我们打包生成前后,os.path.join方法指向的路径是不一样的。

打包前,是本地路径下的resources路面

打包后,是C:\Users\dell\AppData\Local\Temp_MEI443002下的resources目录


默认我们在打包后,C:\Users\dell\AppData\Local\Temp_MEI443002后是不存在我们自己静态资源resources目录的。

但是修改了中间文件.spec后,讲datas中添加了 我们本地的resources目录。于是我们运行exe后,它会自己在C:\Users\dell\AppData\Local\Temp_MEI443002下生成一个我们打包前引入的resources目录。于是运行单个exe后,也会包含我们自己定义的静态资源。


相关文章
|
域名解析 网络协议 算法
阿里云免费HTTPS证书申请入口及申请流程
阿里云免费HTTPS证书申请入口及申请流程,阿里云SSL免费证书在哪申请?一个阿里云账号一年可以申请20张免费SSL证书,很多同学找不到免费SSL的入口,阿小云来详细说下阿里云SSL证书免费申请入口链接以及免费SSL证书申请流程,有同学反馈阿里云免费SSL证书没有了?错,一直都有啊,阿里云一直都有免费SSL提供,只是隐藏得比较深:
3342 0
|
C语言 C++
C语言之分支与循环【附6个练习】(一)
C语言之分支与循环【附6个练习】(一)
|
安全 Linux 网络安全
VS Code通过跳板机连接服务器进行远程代码开发
VS Code通过跳板机连接服务器进行远程代码开发
2644 0
VS Code通过跳板机连接服务器进行远程代码开发
|
5月前
|
数据采集 人工智能 大数据
10倍处理效率提升!阿里云大数据AI平台发布智能驾驶数据预处理解决方案
阿里云大数据AI平台推出智能驾驶数据预处理解决方案,助力车企构建高效稳定的数据处理流程。相比自建方案,数据包处理效率提升10倍以上,推理任务提速超1倍,产能翻番,显著提高自动驾驶模型产出效率。该方案已服务80%以上中国车企,支持多模态数据处理与百万级任务调度,全面赋能智驾技术落地。
516 0
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
471 5
|
存储 API Kotlin
Kotlin中的Map集合
Kotlin中的Map集合
284 0
|
网络协议 Linux 网络安全
利用frp简单实现内网穿透——以ssh为例
*受篇幅该文章是基于服务端-Linux 客户端-window 所作*
1252 0
利用frp简单实现内网穿透——以ssh为例
|
存储 安全 Android开发
Android安全启动学习(三):AVB校验的内容、怎么校验、AVB的作用
Android安全启动学习(三):AVB校验的内容、怎么校验、AVB的作用
1284 0
|
Shell 开发工具 git
git 上传文件到gitlab
git 上传文件到gitlab
893 0
git 上传文件到gitlab
|
JavaScript 前端开发
JS获取元素的几种方法
JS获取元素的几种方法
666 0

热门文章

最新文章