相信很多小伙伴在自己写完了一个py程序,特别是GUI(Graphical Uesr Interface --图形用户接口),写完之后就是特别有成就感,就想把这种喜悦分享给别人,这个时候有两种选择:
1.直接把源代码复制粘贴给对方发过去,让对方直接用pycharm来打开你发过来的py文件,这样就可以在对方的电脑上运行你的程序了。
这种方法的优点:简单粗暴。
缺点就是:
1.装B的B格不够高,对方获得了你的py源程序的话,接收方会理所当然的觉得好像自己也行(就好像你告诉了某个人正确的答案后,然后问ta选哪个,显然对方就可以轻而易举说出答案),这样对方就会觉得你just so so.
2.另一种缺点或者说是问题就是说,如果你的源程序中使用图片,文档,或者其他ico图标之类,这个时候你直接给对方发送你的源程序是会在对方的电脑中报错的,这是因为你的源程序引用到了这些图片或者文档,而且这个引用路径只会在你的电脑上,不会随着你的源程序而打包,但是由于对方的没有你的文件路径,所以就会报错,这个时候就要跳到下面“黄2”步骤。
如果没有源程序中没有任何本地电脑图片或者文档这个时候直接通过:

pip pyinstaller#下载这个pyinstaller这个打包的库
pyinstaller -F -w -i 图标名.ico  文件名.py
#-F就是说打包成单个.exe文件,如果不写-F的话就会默认为-D,会生成很多个文件,有.dll文件类型,也有其他好多文件类型,反正就是单一的.exe文件
#-w(是小写的w),这个作用就是生成不带DOS窗口的界面,就是我们那个我们用Win+R,输入cmd后生成的黑色窗口。一般为了装B的B格更高,一般都会加上-w,但是如果从开发的角度来说的话,最好就是不要加-w,这是因为在这个黑色窗口上可以展现我们的错误,当然如果你的程序中用了输入输出的函数,比如input(),print()函数的话,这个是必须要加上的,这是因为输入输出的信息要在这个DOS显示。
#-i,就是让生成的文件有图标,如果不加-i 图标名.ico的话,就会直接生成默认的图标,也就是python(蟒蛇图标)
#最后一个文件名.py就是你要打包生成的.exe文件的源程序文件,这里只说只有一个.py源程序的情况,在很多情况下,我们写的.py文件有很多,在这个,py文件利用到另一个.py文件这个时候,可以```python
import printheart#这里的printheart打印爱心可能是自己写的printheart.py,要在这个程序中使用就可以进行这种操作

但是这里的话,我们只讨论怎么将一个.py文件打包的情况,有多个文件打包的情况就是留个悬念等我下次有时间再来揭晓。
2 适用于你的程序引用了本地的图片或者是文档,这个时候不是简单的:pyinstaller -F -w -i 图标名 文件名.py
,这个时候我们首先要明确的方向点在于,简单的pyinstaller -F -w -i 图标名 文件名.py 并不能把本地的资源给打包到.exe文件中,因此接下来的操作就是说,怎么把本地引用文件打包到.exe文件中,要实现这个功能必须进行一下的操作:
在讲操作之前,我给你们整理了几个必备知识点,不会让大家在后面的解释中迷糊。
*必备知识点一pyinstaller文档中写到,打包后的文件路径名储存在sys._MEIPASS这个临时目录中。简单点说就是打包后的文件绝对路径的值在sys._MEIPASS中。你可能疑问要知道这个有什么用?回到我们最初的目的----要把本地的引用资源映射到.exe文件中,所以sys._MEIPASS这个作用就是建立本地引用文件路径与打包后的文件的一个映射。
*必备知识点二 .exe文件的打开,是先加载资源路径,也就是先加载我们的文件引用路径,然后才是文件的运行。根据这个原理,就是说,当我们把我们的文件发给一个接受者,如果我们没有进行资源的映射的话,这个时候,引用资源加载失败,原因是打开.exe文件首先进行的是引用资源的加载,但是这个时候没有引用资源的映射所以会加载失败,就会出现黑窗一闪而过,如果手速可以的话,此时截个屏,上面可能提示fileerror文件错误,找不到资源路径。
*操作系统的知识,os(Opearating system),sys(system) 在sys中有一个属性叫“frozen”意思就是冻结绑定的意思,我们想进行的操作是建立一个绝对路径的映射,如果这个“frozen”属性存在,那么经过pyinstaller打包后的跨操作平台的绝对路径就是sys_MEIPASS,如果这个“frozen”属性不存在的话,那么这个经过pyinstaller打包后的跨操作平台的绝对路径就是os.path.abspath(".")
**如何获取这个“frozen”属性 利用Python中的getattr(object,attr,default)函数,这里object是判断的对象,attr是判断对象是否有这个属性,这个default就是如果这个对象不具有这个属性就返回的值,是布尔类型。
*pyinstaller中有一个pyi-makespec库可以制作spec(配置说明书)文件在这个spec文件中有,有一个叫做datas[],里面存储着各种的引用资源文件,以元组形式datas[(项目路径下的资源文件,打包后的储存这个资源的文件名)],这里涉及到了项目文件,所以建议各位,现在自己的python项目路径下新建一个文件夹,取一个你喜欢的名字,然后把所有的资源都拖到里面,这是一个规范,为以后开发提供很多方便。
好了,到这其实就已经完成了,接下来,我直接展示代码和相应的操作图片。

import os#导入操作系统的模块
import sys#导入系统的模块
def get_resources_path(relative_path):#传入一个相对路径,获取系统的绝对路径所在目录,if(getattr(sys,"frozen",False)):base_path=sys._MEIPASS#base_path是绝对路径名else:base_path=os.path.abspath(".")return  os.path.join(base_path,relative_path)#完整的文件名是绝对路径目录加上该目录下的文件名
#在有用到路径的地方直接调用这个函数即可




退出,保存,再去pycharm 中运行

pyinstaller -F -w denglu.spec




使用pyinstaller打包.py文件生成.exe文件相关推荐

  1. Python将py文件生成exe文件

    使用PyCham软件运行生成可执行文件后,最完美的就是将py文件生成exe文件,这样可以任意复制移植到其他电脑上,供他人共享. 由于新手初步尝试,自己一个人摸索,遇到了很多坑.这里先给出最简单有效的方 ...

  2. Matlab.m文件生成.exe文件之旅

    Matlab.m文件生成.exe文件之旅 Matlab中.m文件生成.exe文件之旅 作为算法工程师,有时需要测试人员帮忙测试算法模型,故需要向其发布一个算法工具,也是就是.exe文件.由于近期有利用 ...

  3. python打包成exe fail to ex_“failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误...

    在使用PyInstaller打包python程序,打包命令为: pyinstaller -F -w -i manage.ico yourpyfile.py 顺便说一下几个参数的作用 -F:是直接生成单 ...

  4. windows pyinstaller打包pytorch程序到exe文件

    主要内容 利用pyinstaller将pytorch代码打包成exe其实含有比较多大的坑,这篇文章主要记录最近在项目中打包exe遇到的一些问题,由于问题主要是opencv和pytorch带来的,解决的 ...

  5. Pyinstaller打包 Pytest+Allure成exe文件执行时,报error: unrecognized arguments: --count=1,--alluredir=result错

    Pytest+Allure是一款非常经典的测试框架,堪称完美!!!,但是有时候,我们在测试过程中,当自动化任务很多,需要部署很多的机器去跑工程时,我们又不希望去频繁的部署安装Python环境,所以大部 ...

  6. python文件生成exe文件

    reference : https://www.jb51.net/article/238182.htm

  7. django可以生成exe文件吗_把 Django 程序打包为 exe 可执行文件

    功能背景 我把自动化校准程序写好后,可以在 Pycharm 中运行 Django 程序.但是,这个程序最终要给检定员用的,我不可能在每个检定员的电脑上安装 Django 编程环境让他们使用.所以,要把 ...

  8. Python:批量增强图片清晰度 ——基于百度API,含获取的AK、 SK的流程,access_token的获取流程,以及生成.exe文件

    Python:批量增强图片清晰度 --基于百度API,含获取的AK. SK的流程,access_token的获取流程,以及生成.exe文件 最近需要提高一些图片的清晰度,但一张张的去弄太费时间了,所以 ...

  9. Java多线程之赛跑游戏(含生成exe文件)

    Java多线程之赛跑游戏(含生成exe文件) 在JavaSE中,多线程是一个重要的内容. 我们要了解多线程的概念,就要先了解进程的概念:要了解进程的概念,就离不开操作系统的概念. 在一台正常运行的电脑 ...

  10. pyinstaller打包py文件生成的exe出现闪退问题

    在使用pyinstaller打包py文件生成可执行文件exe出现闪退问题,解决方法: 在需要打包的py文件中的主函数最后一行添加如下代码: python2: raw_input('please inp ...

最新文章

  1. Asp.Net SignalR 集线器不使用代理的实现
  2. 吵架记-2020年6月22日16:47:45
  3. 马斯克不仅承包NASA火箭发射,现在连火箭“摆渡车”都换成特斯拉了
  4. c 调用java的dll_Windows下java调用c的dll动态库--Dev_Cpp编译c生成dll
  5. jvm gc停顿_在JVM中记录世界停顿
  6. C/C++中字符串与数字相互转换
  7. 宁静——一种心灵的奢望
  8. 频率和波特率_实例详解 | 变频器端子启停与通信设定频率(附程序)
  9. 腾讯再开源三项技术,提升企业开发及运营效率
  10. 点滴积累【JS】---JQuery实现条形统计图,适用于选择题等统计
  11. tomcat编码配置gbk_Tomcat运行环境编码设置
  12. centos 安装rarlinux
  13. uygurqa输入法android,uygurqaapp输入法
  14. Redis命令-集合-scard
  15. 867 · 四键键盘
  16. 将时间转换成16进制Unix时间戳
  17. deep learning 从自我学习到深层网络学习
  18. 解析 | 自动驾驶视觉定位与导航技术的研究与应用
  19. 小傻蛋的妹妹跟随小甲鱼学习Python的第二十三、二十四节023、024
  20. 使用IE浏览器下载时候窗口一闪而过

热门文章

  1. 【入门PCB】立创eda的学习
  2. 第二章 年轻人都是富翁
  3. google play连接超时_谷歌Play多年来一直传播高级安卓恶意软件,并曾被用于间谍活动!...
  4. 计算机考试用远程桌面,远程桌面客户端对服务器身份的验证
  5. app界面设计规范及缺陷
  6. 如何从Mixamo下载人物模型的动画
  7. 层次、网状、关系模型
  8. 李沐动手学深度学习V2-attention注意力机制
  9. echarts地图设置边界线颜色显示不全
  10. arcgis 属性表 汇总_最常用的GIS数据汇总