1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python:pyinstaller如何将一个项目的.py和相关资源文件打包生成.exe文件

Python:pyinstaller如何将一个项目的.py和相关资源文件打包生成.exe文件

时间:2019-12-12 05:06:03

相关推荐

Python:pyinstaller如何将一个项目的.py和相关资源文件打包生成.exe文件

前言

写这篇博文真属于意外,因为小编不是以学术为目的的,而仅仅是以讨女朋友喜欢为目的,所以文中略有狗粮。撇开这些,相信大家找到为了找到一个可行方案已经寻寻觅觅良久,本文或许便是你的“真命天子”。Python生成.exe的方法有很多,本文仅介绍pyinstaller。文本的解决思路便是:.exe文件在执行时会生成一个临时文件夹,而我们需要做的就是把我们的资源文件放入临时文件夹,让程序访问。本文使用的是Windows系统,其他系统以实际情况为转移。

目录

前言 一. 打包.exe文件方法简介二. 究极解决方法1. 打包资源文件夹2. 修改.py文件3. 生成.spec文件并修改4. 生成.exe文件以及其他相关文件 参考资料

未经允许,禁止转载。

一. 打包.exe文件方法简介

Python打包.exe的方法大致有四种:py2exe, pyinstaller,cx_Freeze和nuitka。其中最常用的是pyinstaller。Pyinstaller本身不是python库,但依旧可以安装python库安装方式安装,生成的.exe可以跨多平台使用,也能指定图标。

生成.exe的一个弊端是文件太大,强烈建议使用from xxx import xxx 语法而不是import xxx,因为这样.py文件只需导入库文件的一部分,可以降低.exe文件大小。

二. 究极解决方法

前言中讲到要利用.exe文件的临时文件打包资源文件,那现在怎么做呢?

1. 打包资源文件夹

我们需要把使用到的资源文件都放在一个文件夹里。本文在当前目录下新建了一个名为res的子文件夹来存放资源文件,本文假设res内的资源文件为ConfessionBallon.MP3

2. 修改.py文件

我们需要在读取资源文件的地方调整我们的代码,加入下面的代码:

#coding:utf-8import sysimport os#生成资源文件目录访问路径def resource_path(relative_path):if getattr(sys, 'frozen', False): #是否Bundle Resourcebase_path = sys._MEIPASSelse:base_path = os.path.abspath(".")return os.path.join(base_path, relative_path)#访问res文件夹下ConfessionBallon.MP3的内容filepath = resource_path(os.path.join("res","ConfessionBallon.MP3"))

然后,修改其他地方,所有获取资源文件路径的方式皆如上所示。本文中便是使用filepath访问ConfessionBallon.MP3。

3. 生成.spec文件并修改

修改完.py文件后可以先运行一下,保证无误。然后通过cmd指令:

pyi-makespec -F beloved.py

生成.spec文件。如果要添加Icon等可以在这里就使用pyi-makespec --icon abc.jpg -F beloved.py语句生成spec文件。

接下来,修改.spec文件:

修改前datas=[],本文这里把它改成上图所示,意思是

将beloved.py当前目录下的res目录(及其目录中的文件)加入目标exe中,在运行时放在零时文件的根目录下,名称为res。

到这一步便可以把资源文件嵌入到.exe文件了。

4. 生成.exe文件以及其他相关文件

接下来,我们便可以放心的生成.exe文件了。执行cmd指令:

pyinstaller -F beloved.spec

.exe文件生成在子文件dict中。到此便可以把.exe发给其他电脑端运行了。.exe运行比较慢,建议多等待,只要没出现错误提示就OK。

可能会出现No module named 'pkg_resources.py2_warn’错误提示,详情参见解决方案。

本文代码和运行效果图由于比较私密,便不与大家分享了。希望本文能对大家有用。

参考资料

王张飞,Pyinstaller生成exe文件(详细教程),/RNG_uzi_/article/details/92986876,CSDN。浪子燕青啦啦啦,Python打包exe文件方法汇总【4种】,/lzy98/article/details/83246281,CSDN。super_小黄,Python导出exe打包之吐血总结,/p/c029574187d2,简书。darcymei,Pyinstaller如何将资源文件一起打包至exe中,/darcymei/p/9397173.html,博客园。fred110119,pyinstaller 打包exe运行错误 No module named ‘pkg_resources.py2_warn’,/fred110119/article/details/104667749,CSDN。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。