pyinstaller打包exe(32位和64位)和运行太慢等问题解决

文章目录

    • pyinstaller打包exe(32位和64位)和运行太慢等问题解决
  • 前言
  • 一、pyinstaller的安装
  • 二、pyinstaller使用介绍
  • 三、打包32位和64位exe
  • 四、打包的exe文件太大的问题
  • 五、打包的exe文件启动运行太慢
  • 总结


前言

因为涉及到需求,因此笔者研究很久的python打包exe,目前有很多打包方法例如py2exe,pyinstaller,cx_Freeze,nuitka对python文件进行打包成可执行文件。但目前最常用而已也是最好用的是pyinstaller,因此笔者就来简单介绍下pyinstaller的使用和遇到的一些坑


一、pyinstaller的安装

  1. pyinstaller是python直接可以调用的一个包,直接在cmd里pip install pyinstaller即可,目前pyinstaller支持的python版本为3.5-3.8,即3.5以上的任何python版本都能直接pip安装使用pyinstaller。
  2. pyinstaller -v查看是否安装成功

二、pyinstaller使用介绍

参数 Value
-F,-onefile 产生单个的可执行文件
-D,–onedir 产生一个目录(包含多个文件)作为可执行程序
-a,–ascii 不包含 Unicode 字符集支持
-d,–debug debug 版本的可执行文件
-w,–windowed,–noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,–nowindowed,–console 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,–out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,–path=DIR 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,–name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
Column 1 Column 2
centered 文本居中 right-aligned 文本居右

这里常用的为-F 和-D,
项目结构:

  1. cmd到当前项目路径
  2. pyinstaller -F xxx (xxx为项目主程序)
  3. 等待运行结束项目中多了几个文件dist、build和main.spec,我们需要的exe文件在dist里
  4. pyinstaller -D xxx (这个是打包出多个文件,而不是只有一个可执行文件,运行的时候每个文件都不能少,特点:文件小,运行速度快。缺点:文件多)
  5. 打包结果

三、打包32位和64位exe

在许多场景可能会用到32位的exe,因此需要打包32位的exe,当然取决于python的版本环境了,python如果是32位的那么打包出来的exe也是32位的,64位同理。为了方便我们使用anaconda(anaconda安装和使用教程)创建虚拟环境来打包32位exe。

  1. 先搭好好32位python环境和安装各种需要的包

  2. 查看是否位32位python环境

  3. 输入pyinstaller打包即可

  4. 把打包好的exe文件用记事本打开,如果没有这种打开方式那就直接打开一个记事本,然后把exe文件拖到记事本,用文本编辑器打开(以UTF-8编码),搜索关键词PE(PEL对应32位,PEd对应64位)
    一个32位的exe就打包好了

四、打包的exe文件太大的问题

一个就只有几十行代码的程序,打包出来竟然有300多MB,这完全超出了我们的,查了很多资料才知道,pyinstaller会把python环境中的很多项目没有用到的包都一起打包进去,这样就增大了exe的大小了,
解决方法:
使用anaconda创建一个单独干净的虚拟环境,然后在这个单独环境里安装相应的需要用到的包,然后对项目进行打包,这就是我们前几篇文章提到的为啥要用anaconda的原因,方便我们管理每个项目的Python环境和对呀的包,几乎都要坐到每个项目单独对呀一个虚拟环境。这样打包出来就只有10MB左右

五、打包的exe文件启动运行太慢

在大多数的情况下,我们的项目是很大的,不仅仅是只有几十行代码而已。当我们pyinstaller -F xxx打包成单一的exe文件后会遇到一个问题,就是明明在程序里运行瞬间就启动了,然而运行exe文件的时候却发现运行的很慢,几乎要1、2分钟左右才会开始启动执行代码。那是因为:
-D:生成一个文件夹,里面是多文件模式,启动快。
-F:仅仅生成一个文件,不暴露其他信息,启动较慢。
我们都是只想要一个文件,而不想看到太多的附带文件,如何即想要单一文件运行,又加快运行速度呢
解决方法:

  1. 使用pyinstaller -D xxx 打包,生成一个文件夹
  2. 使用Enigma Virtual Box.exe这个文件夹里的文件进行重新打包
    百度网盘:https://pan.baidu.com/s/1uX6pH-MS9a4KLEbLvxcsZA
    提取码:ppsg
  3. 把文件夹下的所有文件(除开xxx.exe文件#即主程序的exe文件,我这里是companyid.exe)拖进这个软件里直接点确定即可,这个不影响
  4. 选择主程序文件名称
  5. 点击打包即可在文件夹下看到最后打包好的companyid_boxed.exe
  6. 最后把这个文件取出来即可,其他的文件都可以删除掉,这样就解决了单一可执行文件exe运行太慢的问题。

总结

笔者每天都在不断填坑,希望读者可以用到,可以给读者带来作用是笔者每天不断填坑的动力,最后祝读者早日脱坑!

pyinstaller打包exe(32位和64位)和运行太慢等问题解决相关推荐

  1. 判断oracle客户端是32还是64,64位-如何知道已安装的Oracle Client是32位还是64位?

    64位-如何知道已安装的Oracle Client是32位还是64位? 操作系统:Windows 2008 Server R2 Oracle客户端:11.2 非常感谢 8个解决方案 73 votes ...

  2. python 32位和64位共存以实现打包32位exe和64位exe

    一.简介 完成pkg封包源码后,百度得到python py格式源码打包成exe 文件的方法 1.打包exe文件方法 在这之前,仅仅只是安装了python,并未安装其他相关工具. 首先,安装 pyins ...

  3. python 64位程序 打包用于32位系统_python分别打包出32位和64位应用程序

    由于我们分发的python应用可能运行在64位环境,也可能运行在32位环境,所以我们需要为同一套应用代码配置两套打包环境,怎么配置? 步骤如下 1,在电脑上分别下载安装32位和64位的python,安 ...

  4. python把64位程序变成32位_python分别打包出32位和64位应用程序

    由于我们分发的python应用可能运行在64位环境,也可能运行在32位环境,所以我们需要为同一套应用代码配置两套打包环境,怎么配置? 步骤如下 1,在电脑上分别下载安装32位和64位的python,安 ...

  5. Labelimg标注工具汉化及32位、64位可执行exe文件下载

    Labelimg标注工具汉化及32位.64位可执行exe文件下载 实现功能 软件介绍 实现功能 最近在工作中有一个新的需求,就是对labelimg标注软件实行汉化和简单的标注工作量统计,这里给大家放出 ...

  6. 一台计算机有64,在同一台计算机上使用带有32位和64位Altium设计软件的数据库元件库...

    数据库元件库(DbLibs)是一种流行且强大的元器件管理解决方案.但是,将Microsoft Access用作元器件的后端数据库时,使用Altium设计软件的32位和64位版本之间有一个重要区别: 6 ...

  7. 32位和64位版本的Office异同点

    转载: https://jingyan.baidu.com/article/9989c7461bb945f648ecfeee.html 在大多数情况下,安装 32 位版本的 MicrosoftOffi ...

  8. 判断当前Windows XP操作系统是32位还是64位的方法

    昨天在调查怎样区分Windows XP32位和64位的问题,在网上找了一下,大家常用的有两种方法. 方法一.通过指针来判断. 在32位操作系统上指针长是4个字节,而在64位系统上指针为8个字节. 方法 ...

  9. 32位/64位系统,jdk32位,64位,32/64位jdk编译出来的class和eclipse 32位和64位

    首先关于32位/64位系统,jdk32位,64位,32/64位jdk编译出来的class和eclipse 32位和64位的一些对应关系做些说明. 1.32位操作系统不可以装64位jdk,64位操作系统 ...

最新文章

  1. android 动态添加元素,动态添加项目到Android中的NavigationView
  2. 编写高质量代码改善C#程序的157个建议——建议104:用多态代替条件语句
  3. 13-SDEI: Software Delegated Exception Interface
  4. python数据库教程_Python连接mysql数据库及简单增删改查操作示例代码
  5. Hadoop的Mapreduce中Mapper的key和Map的key的区别
  6. BGP——重分发注意点(总结+配置)
  7. (10)魔兽文件打包器里的传奇哈希表
  8. 产品经理学习---高级产品经理
  9. MFC初探 —— 双击Picture Control具体位置放大图片
  10. 等长子网划分、变长子网划分(网络整理)
  11. div透明但不导致内容div透明的解决方法
  12. Eclipse中的Git使用之Branch创建,Merge
  13. html 分页 惰性加载,懒加载实现的分页网站footer自适应
  14. slam十四讲第十讲:找不到 g2o_viewer
  15. 用Redis客户端工具连接Redis
  16. Java-Scala编程规范超精简
  17. 父亲节php源码,剑盟社区-【父亲您在,世界就在】6月20日父亲节系列活动
  18. 云计算采用的各种虚拟化技术比较
  19. peoplesoft 日志
  20. 使用百度文字识别API进行图片中文字的识别

热门文章

  1. 知名软件已经成为手机病毒滋生的乐土
  2. Flutter 强制获取焦点的问题
  3. Libra-Platform微服务平台之全链路蓝绿灰度发布
  4. Excel 2010 VBA 入门 144 制作通用工具
  5. 树形图计算机系统组成,C数据结构的通用树结构和二进制排序树的基本操作
  6. SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势
  7. [ecshop 资料 ]ecshop 怎么实现购物满200元免运费
  8. 求图中两点间的所有的最短路径
  9. 测试左移和右移:不是左右逢源而是左右突击
  10. 哈希(HASH)算法总结