范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

2个技巧,学会Pyinstaller打包

  目录: 1. 安装pyinstaller2. 打包初体验3. 打包进阶体验4. 带配置文件打包(高级)5. 添加隐式调用库(高级)1. 安装pyinstaller
  PyInstaller  是一个用来将Python  程序打包成一个独立可执行文件的第三方包。
  因是第三方包,所以需要安装一下:pip install pyinstaller
  或者升级到最新版本:pip install --upgrade pyinstaller
  或者安装开发者版本:pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
  当然了,也可以下载whl  文件,然后pip install  安装
  更多可参考官网指引:
  http://www.pyinstaller.org/downloads.html 2. 打包初体验
  我们简单试下打包python代码为exe可执行文件,测试代码如下:# 测试.py import os  path = os.getcwd() print(f"当前文件路径:{path}") os.system("pause")
  这段代码是打印文件所在的目录,我们用pyinstaller  简单打包的命令如下:pyinstaller -F 测试.py
  这个命令,执行过程如下:(env_test) F:PythonCoolpyinstaller>pyinstaller -F 测试.py     403 INFO: PyInstaller: 4.3 403 INFO: Python: 3.8.10 (conda) 434 INFO: Platform: Windows-10-10.0.19042-SP0 436 INFO: wrote F:PythonCoolpyinstaller测试.spec 455 INFO: UPX is not available. 468 INFO: Extending PYTHONPATH with paths ["F:PythonCoolpyinstaller", "F:PythonCoolpyinstaller"] 501 INFO: checking Analysis ... ... 15006 INFO: Appending archive to EXE F:PythonCoolpyinstallerdist测试.exe 18999 INFO: Building EXE from EXE-00.toc completed successfully.
  成功后会在同级目录下生成一个dist  文件,里面就是一个和代码文件名同名的可执行文件:
  双击该可执行文件,我们可以看到直接在python  解释器里运行测试.py  文件时一样的结果:
  这里需要注意的是,我们在进行打包的时候,有必要指定被打包的py文件的路径,两种方式供选择:
  方式一:先切换到被打包py文件目录,再执行打包指令(base) C:UsersGdc>cd F:PythonCoolpyinstaller (base) C:UsersGdc>F: (base) F:PythonCoolpyinstaller>pyinstaller -F 测试.py
  方式二:打包指令中指定py文件的绝对路径(base) C:UsersGdc>pyinstaller -F F:PythonCoolpyinstaller测试.py
  关于成功打包的测试.exe  可执行文件,我们发现其图标是默认的,且启动时会显示命令行窗口。那么,我们可以怎么自定义exe  图标,又或者去掉命令行窗口呢?3. 打包进阶体验
  好了,接下来,我们先看看关于pyinstaller  打包时候的一些别的参数都有哪些,如何自定义exe  图标以及如何去掉命令行窗口等等。(env_test) F:PythonCoolpyinstaller>pyinstaller -h
  pyinstaller -h  可以查看其参数说明,由于较多这里不做完整展示,摘取部分常用参数做简要介绍:
  参数说明-F产生单个的可执行文件-D产生一个目录(包含多个文件)作为可执行程序-a不包含 Unicode 字符集支持-ddebug 版本的可执行文件-w指定程序运行时不显示命令行窗口(仅对 Windows 有效)-c指定使用命令行窗口运行程序(仅对 Windows 有效)-o指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件-p设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径-n指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
  打包一个带自定义icon的exe可执行文件
  我们可以去这里下载icon文件:
  https://www.iconfont.cn/
  可以去这里将图片转化为icon文件:
  https://www.bitbug.net/
  然后,用以下命令可以自定义exe图标:(env_test) F:PythonCoolpyinstaller>pyinstaller -F -i icon.ico 测试.py
  成功后,我们可以看到图标变成了我们自定义的这个:
  打包去掉命令行弹窗的exe可执行文件
  如果我们是有GUI的程序,想在启动的时候去掉命令行窗口,那么可以用以下指令进行打包,这里以tkinter  内置GUI库为例展示:# 测试.py import tkinter  top = tkinter.Tk() # 进入消息循环 top.mainloop()
  以上测试代码,如果用初体验中的方式,在GUI界面出现的同时也会出现命令行弹窗,我们想去掉命令行弹窗可以:(env_test) F:PythonCoolpyinstaller>pyinstaller -F -w -i icon.ico 测试.py
  双击打包后的exe  文件,可以看到只会出现GUI界面,命令行窗口并没有出现。
  4. 带配置文件打包
  所谓带配置文件打包,这里是指打包的时候除了py文件、依赖的库之外,还存在需要引用的其他资源文件。直接用以上方式打包的时候,这些资源是无法被打进包的,我们需要进行修改打包时的spec  文件来实现。
  spec文件是告诉Pyinstaller怎么打包py文件,比如路径、资源、动态库、隐式调用的模块等等。一般来说,我们不需要对它进行修改...
  这里我用此前《词云绘制小工具 》的案例来进行介绍。
  我们直接用打包进阶体验中的命令可以进行成功打包,不过这里我们发现有两个问题:①包体很大,比此前案例里大了10倍左右;②启动exe文件的时候报错了。
  关于包体较大的情况,可以试着创建虚拟环境,然后只安装程序里需要调用的库即可,这里只简单介绍:# 创建虚拟环境 conda create -n your_env_name python=3.8.10 # 启动虚拟环境 activate your_env_name
  关于启动报错的情况,由于比较复杂,我们一步一步来看:
  由于无命令行弹窗,无法查看到具体的报错,这里先去带命令行窗口形式看下报错信息,我们看报错如下:
  提示缺少这个文件,我们可以在打包生成的词云绘制工具.spec  配置文件里将这个资源放上# -*- mode: python ; coding: utf-8 -*- # 词云绘制工具.spec  block_cipher = None  a = Analysis(["词云绘制工具.py"],              pathex=["F:PythonCoolpyinstaller"],              binaries=[],              datas=[], # 这里带上资源文件地址              hiddenimports=[], # 动态引入的库或模块              hookspath=[],              runtime_hooks=[],              excludes=[],              win_no_prefer_redirects=False,              win_private_assemblies=False,              cipher=block_cipher,              noarchive=False) pyz = PYZ(a.pure, a.zipped_data,              cipher=block_cipher) exe = EXE(pyz,           a.scripts,           a.binaries,           a.zipfiles,           a.datas,           [],           name="词云绘制工具",           debug=False,           bootloader_ignore_signals=False,           strip=False,           upx=True,           upx_exclude=[],           runtime_tmpdir=None,           console=True , icon="icon.ico")
  通过在wordcloud  模块目录里查到了stopwords  文件,我们将其放到data中。
  datas=[("C:UsersGdcanaconda3envsenv_testLibsite-packageswordcloudstopwords","wordcloud")], # 这里带上资源文件地址
  前者是资源文件在本机的位置,后者为打包后文件调用的相对路径,编辑好spec  文件后,通过以下命令进行打包:(env_test) F:PythonCoolpyinstaller>pyinstaller -D 词云绘制工具.spec
  好吧,还有一些文件未被打进包,所以又出现同样的问题了。所以,我们是需要把全部的资源文件都加到spec文件里的data中。
  我们找到全部的资源文件全部加上吧,然后再执行打包命令。datas=[("C:UsersGdcanaconda3envsenv_testLibsite-packagesstylecloudstatic","stylecloudstatic"),     ("C:UsersGdcanaconda3envsenv_testLibsite-packageswordcloudstopwords","wordcloud"),     ("C:UsersGdcanaconda3envsenv_testLibsite-packagesjiebaanalyseidf.txt","jiebaanalyse"),     ("C:UsersGdcanaconda3envsenv_testLibsite-packagesjiebadict.txt","jieba")]
  我们将配置资源打进包后可以正常启动exe可执行文件了。
  但是,又发现在执行词云绘制的时候,也会出现报错。不过看报错的情况是提示不存在xx模块  ,那么这是什么情况呢?!5. 添加隐式调用库
  我们找到报错的地方代码如下,采用了__import__()  函数用于动态加载类和函数palettable  模块。def gen_palette(palette: str):     """Generates the corresponding palette function from `palettable`."""     palette_split = palette.split(".")     palette_name = palette_split[-1]      # https://stackoverflow.com/a/6677505     palette_func = getattr(         __import__(             "palettable.{}".format(".".join(palette_split[:-1])),             fromlist=[palette_name],         ),         palette_name,     )     return palette_func
  对于这个问题,我试过两种方案,大家可以参考一下。
  方案一:在spec文件中hiddenimports中添加动态引用的模块hiddenimports=["palettable"], # 动态引入的库或模块
  这种情况下,palettable  库里也有一些配置文件需要添加到spec文件里的data中("C:UsersGdcanaconda3envsenv_testLibsite-packagespalettablecolorbrewerdata","palettablecolorbrewerdata")
  方案二:修改stylecloud库中调用palettable模块的代码部分import palettable def gen_palette(palette: str):     palette_func = getattr(palettable.tableau,"BlueRed_6")     return palette_func       # """Generates the corresponding palette function from `palettable`."""     # palette_split = palette.split(".")     # palette_name = palette_split[-1]      #    https://stackoverflow.com/a/6677505     # palette_func = getattr(         # __import__(             # "palettable.{}".format(".".join(palette_split[:-1])),             # fromlist=[palette_name],         # ),         # palette_name,     # )
  通过第4和5部分,我们用pyinstaller终于成功打包且正常运行使用了。
  以上就是本次全部内容,大家如果遇到打包时涉及到配置文件的或者隐式调用的,可以采用这两个2技巧进行特殊打包!
  不过,关于pyinstaller打包其实还有更多高级操作,大家可以多看看官方文档了解,主要是命令行参数及spec文件里的配置要点。

本届冬奥会上,主媒体中心智慧餐厅的饭菜均由机器人烹饪制作冬奥会智慧餐厅的做饭机器人可以做出200多种中外美食,如麻辣烫宫保鸡丁煲仔饭等中餐,也能做汉堡意式肉酱意面等西餐,甚至煮饺子煮馄饨调鸡尾酒。而且,它们24小时待命,不会累出餐快,还字节跳动将拓展VR和2B领域美团试水种草丨零售电商周报亿邦原创字节跳动将拓展VR和2B领域,美团试水种草赛道。又到了跟邦小白一起回顾一周电商大事的时候了!过去一周,零售电商领域发生了这些事。平台级动态1字节跳动将调整业务方向拓展VR和美的医疗赛道新突破万东医疗推出世界首台无液氦超导磁共振澎湃财讯1月25日,澎湃新闻记者从美的集团获悉,旗下的智慧医疗板块上市公司万东医疗(600055)的开天iVision1。5T无液氦磁共振正式获得国家药品监督管理局批准的医疗器械注报应来了!要花56亿美元,美国政府禁止华为的下场开始显现美国针对在美的中国企业,采取国家力量进行打压制裁,早已经不是一次两次,为了扩大本土企业的优势,美国没少给中企下绊子,在美国的中企却依旧咬紧牙关忍让,严格遵守美国国内制定的贸易规则和Xr人要不要升级15。3。1?一直将苹果当主力机使用,每次看到有新系统版本出来时都会特别关注,也会纠结到底要不要升级,一方面是想着体验新的功能,再者升级堵住已知的安全漏洞,但自己用的手机毕竟不是最新的,都是两三Mysqlroot账号如何重置密码今日分享主题mysqlroot账号如何重置密码前两天发现我的mysql数据库突然无法登录,但是上周还使用得是正常的,经过一番查找还是没有找到问题的原因。DBA给我的解释我怀疑主机重索尼电视2022新品价格预测索尼尚未公布价格细节,但索尼网站上的一项奖励计划可能表明,该公司首批55英寸和65英寸QDOLED电视的价格将分别为3000美元和4000美元。据外媒HDTVtest讲述的方法So真香,OPPOReno6系列国庆购机最高特惠300,综合体验超给力作为OPPO今年推出的中高端产品,Reno6系列凭借着在产品端的出色表现,自亮相以来也受到了众多消费者的青睐。日前官方宣布,Reno6系列将在国庆期间启动限时特惠活动,并将提供最高金蛇狂舞之pythonPython,原义是蟒蛇。有人认为作者命名任性,我认为GuidovonRossum是受了飞行马戏团(MontyPython)之启迪。在中国,有舞龙之盛会。Python之列表元组集合首个能传达人工触觉的多通道臂带问世新可穿戴设备助假手实现抓握自由科技日报讯(记者张梦然)使用当前的肌电假手,即使能够单独控制所有5个手指,用户一次只能做一个抓握动作。美国研究人员在科学报告上发表论文称,他们首创了一一分钟让你拥有别人家的宿舍叮咚!您的假期余额不足啦!马上就要开学了,纵然有万般的不舍,作为学生党的我们也很快就要从每天瘫在床上追剧吃零食的假期模式切换到每天按时起床赶早八的学习模式了。开学之后宿舍就会成为我
15楼财经官宣!华为将于6月2日发布手机鸿蒙操作系统5月25日,华为官方宣布,将在6月2日晚20时召开鸿蒙操作系统及华为全场景新品发布会,届时将正式发布可以用于手机的鸿蒙操作系统。北青北京头条记者了解到,目前部分用户已收到Harmo数字人民币匿名可控,未来,一切资产包括人的身份都将被数字化5月22日举行的2021清华五道口全球金融论坛上,中国金融学会会长周小川对数字人民币进行深入探讨,并谈及了数字人民币可控匿名的问题。他指出支付系统必然要在保护隐私和反洗钱反恐反毒品数字货币是2021的财富大趋势,数字人民币的未来已经到来寄语每一天都是新的开始,在这个投资市场上,大多投资者开始的时候都是抱着赚钱的心态入市,可是亏损的原因日益加重,对赌的心态,不服输的心态,慢慢滋生。开始为了赚钱做单,后来只为解单做单别忘了!北京新政首期新能源小客车指标,明天配置根据家庭摇号新政安排,明天上午将进行摇号新政实施后首期新能源小客车指标配置,上半年普通指标6月26日摇号。从上周二开始,北京上半年申请小客车配置指标的家庭积分情况已分批次公布。据了比特币暴跌,挖矿的江湖水到底有多深前几天家里一个长辈打电话给我,他是卖矿山机械的,看新闻说矿机价格大涨,他说没有这回事啊,新闻怎么乱说呢,自己的挖掘机明显没涨啊。我和他解释了半天也不知道他听懂了没有,反正就是说新闻福布斯亿万富翁名单榜首换人贝索斯被挤下首富位置据媒体计算,法国酩悦轩尼诗路易威登集团(LVMH)总裁伯纳德阿尔诺在福布斯实时亿万富翁榜单上排名第一,领先于亚马逊创始人杰夫贝索斯。据福布斯专栏报道,阿尔诺的财富为1863亿美元,千元机也可以这么堆料!明天的红米Note10系列记得抢就对了纵观5月末,虽然友商也争相发布了不少618预热机型,但如果说哪款手机热度最高,只能说只有RedmiNote10系列最引人关注。不仅产品本身很能打,产品经理也是非常有才华,说学逗唱样美团优选推出团小美,团长退场,平台还需要团长吗?社区团购经过一场团长争夺战后,平台们又迎来新的变局。随着互联网巨头的入局,社区团购内部也发现了改变,作为曾经的老三团,兴盛优选十荟团同程生活,也纷纷为互联网巨头们让位。因此,社区团微信支付系统出现异常,多平台受影响5月24日上午10时28分后由于微信支付出现小范围短暂宕机状况部分用户点餐受到了影响无法在美团京东等支持的第三方支付通道平台通过微信完成支付对此美团回应称,目前已配合微信完成了修复电动车时代,4S店必死?记得在几年之前,当特斯拉蔚来理想等品牌车企采用在线订购线下交付的方式来进行车辆销售的时候,一些经销商的头头脑脑们站出来表态,特斯拉蔚来等车企的方式是不可持续的,将会使车企的成本大幅苹果修复macOS11。4零日漏洞可被攻击者秘密截屏或录制视频AppleInsider报道称,苹果刚刚为macOSBigSur11。4修复了一个零日漏洞。早前的概念验证表明,攻击者可通过劫持现有应用程序的权限,来秘密截取屏幕画面或录制视频。率