前言

之前有做过Python的pyqt桌面应用,当时每次更新打包的时候整个文件下来都需要300~400M,但是一直没有找到合适的方法解决,而是尽量Python少安抓库包,但效果一般,最近找到了解决方法,特此记录,给需要的小伙伴用~

步骤

1、为什么要打包?

众所周知,Python脚本不能在没有安装Python的机器上运行。

那我们如果写了一个数据分析/自动化办公的小脚本,想分享给同事小姐姐使用,可她电脑又没有装Python。

这个时候如果将脚本打包成exe文件,微信发送给她,即使她的电脑上没有安装Python解释器,这个exe程序也能在上面运行。

一般步骤:

Pyinstaller -F py_word.py 打包exePyinstaller -F -w py_word.py 不带控制台的打包Pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe图标打包

以上三个是比较常用的参数,其他参数详见下表

ico图片生成

扩展:把其他格式图片转成ico格式:https://app.xunjiepdf.com/img2icon/

conda创建虚拟环境

1、Python打包为什么大?

在压缩打包之前,先简单说一下为什么Python打包过大?

Python打包exe,不但体积大而且运行奇慢。解释型语言大都是这个样子,只不过Python尤其突出。要解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编。

此外,还有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。

所以我们可以模拟一个新环境,其中只安装我们本次打包所必要的工具包即可。

那最适合的就是——虚拟环境了!

2、虚拟环境

Python创建虚拟环境的方法有很多,我这里用的时候Anaconda(大家也可以使用Virtualenv、Pipenv来设置虚拟环境等其他方法)

先记几个命令,很简单

conda create -n 虚拟环境名字 python==3.6  #创建虚拟环境
conda activate 虚拟环境名字               #激活虚拟环境
conda deactivate                          #退出虚拟环境

从开始菜单运行“Anaconda Prompt”,出现的界面输入创建虚拟环境的指令。成功创建了一个名字为aotu,且基于python版本3.6的虚拟环境。

在创建过程中需要回复(y/n),Yes,再激活虚拟环境

conda安装的虚拟环境,会把虚拟环境的目录生成在anaconda安装目录下的env目录下。

当然我们也可以在刚刚的窗口,使用命令conda info --envs,来查看conda环境下所有的虚拟环境

3、安装所需的库

上面我们已经创建并激活了名为aotu虚拟环境,输入conda list可以查看当前虚拟环境里已经安装的库。

我们打开所要打包的Python脚本,对比上图,发现pandasdocx这两个库还需要额外安装。当然,也不能缺了打包必不可少的pyinstaller库。

安装库的过程不再赘述

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

安装后再看

已成功安装,还有一些因为这几个库所附带安装的,就不管他们了

4、Pyinstaller打包步骤

这里就不再重复了,只换个苹果图标试试

Pyinstaller -F -w -i apple.ico py_word.py

生成

成功压缩到29.8M,如果不导入pandas这位大神,应该就可以10多M了

最后再简单总结一下虚拟环境+打包的全过程(只三步):

#创建虚拟环境
conda create -n aotu python=3.6#激活虚拟环境
conda activate aotu#Pyinstaller打包
Pyinstaller -F -w -i apple.ico py_word.py

5、总结一些小坑

1、上文中一模一样的过程我在两个电脑都执行过一遍。在其中一个上显示缺少xlrd这个库,安装后成功打包,也是一样的大小。

2、在安装库是要注意一些库名,比如docx这个库不要pip install docx,而是需要

pip install python-docx

还有一些库可能因为版本不同导致不能使用,多碰碰壁就好了。

3、为了防止打包时候有些库没安装好,可以先在虚拟环境中执行一下Python脚本。运行无误的话再打包,比较保险。

4、最后,如果想要删除虚拟环境的话,可执行下方命令

conda remove -n aotu--all 

5、打包为exe的话,版本尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。

结语

到这里,python打包成exe基本算是结束了,记得一定要把pip升级成最新版的pip在安装pyinstaller哈。要不然可能会出现莫名奇妙的问题。

扩展其他打包方法和注意事项:

1、用form import导入需要的模块会更好一点

2、使用. spec配置文件打包即可,在. spec中去除掉日常用不到的大的包

3、Nuitka打包

解决 Python打包成exe 文件过大问题的一些方法相关推荐

  1. Tips--解决Python打包成exe文件大启动慢的问题

    解决Python打包成exe文件大启动慢的问题 1. 问题描述 2. 产生原因 2. 解决方法 2.1 建立虚拟环境 2.2 安装所需库 2.3 在环境中打包 2.4 附pyinstaller参数表 ...

  2. Python打包成exe文件_详细操作

    Python打包成exe文件 前言 一.安装pyinstaller 1.1 安装pyinstaller,使用安装命令: 1.2 如果遇到需要更新版本请输入: 1.3 检查是否正确安装 1.4 稍等,水 ...

  3. 把python语言翻译出来_Python语言实现翻译小工具(Python打包成exe文件)

    本文主要向大家介绍了Python语言实现翻译小工具(Python打包成exe文件),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.环境 windows10 python3.5 ...

  4. python打包成.exe文件时出现“系统找不到指定路径”

    python打包成.exe文件时出现"系统找不到指定路径" 我在一开始写工程时就想到最后打包的时候可能会出现文件位置会发生移动,所以并没有使用绝对路径,而都是以相对路径写的程序. ...

  5. python如何将图片打包进exe里_史上最详细的Python打包成exe文件教程

    打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白.情人节浪漫的必需品! 1.使用豆瓣镜像源下载: pyinstaller 有需要了解如何使 ...

  6. python打包成exe文件大、执行慢_Pyinstaller打包exe太大,运行太慢

    1.背景 通过python使用pyqt编写了一个界面程序,并使用pyinstaller将其打包成exe文件 2.问题 打包的exe文件非常大,有280M,而且更无法忍受的是打开非常非常的慢!!! 3. ...

  7. python打包成exe文件提示PermissionError: [Errno 13] Permission denied: ‘C:\\Users\\wj\\AppData\\Local\\Progr

    用python写了个脚本给业务部门用,考虑业务部分使用环境问题给打包成exe文件.在打包时提示PermissionError: [Errno 13] Permission denied: 'C:\\U ...

  8. 将python打包成exe文件(携带附属文件)

    前言 用Pyinstaller进行打包exe时,有时候得附带上一些资源,提高程序的实用性和人性化. 在网上也有很多把依赖文件打包进exe的方法,不过都只能打包一些图片或者文本而已. 另一种方法是通过修 ...

  9. Python打包成.exe文件详细实例

    目录标题 安装pyinstaller 打包文件成exe程序 (下面举个栗子) 已知python环境配置后 安装pyinstaller pip install pyinstaller 查看是否安装成功 ...

最新文章

  1. 【转载】#pragma once与#ifndef #define #endif的区别
  2. Linux入门笔记——type、switch、help、man、apropos、whatis、info
  3. html设置导入字体样式表,HTML CSS@face 导入字体
  4. PbootCMS V1.1.4 正式发布
  5. PHP修复输入验证代码中的漏洞
  6. 使用Block在两个界面之间传值
  7. Slog86_使用Sketch 设计ArthurSlog网站主页原型
  8. JavaScript控制文字方向
  9. php 依赖注入 数据库切换_通俗易懂理解PHP依赖注入容器
  10. insert into 语句 mysql_sql insert into 语句
  11. 【快学springboot】使用springboot发送邮件
  12. 【UVA12304】2D Geometry 110 in 1!(外接圆/内切圆/切点等圆相关问题的模版题)
  13. macOS Monterey 12.0 Beta5 (21A5304g) 虚拟机 ISO 镜像
  14. erf函数 matlab,关于ODE45初值问题和erf函数的问题
  15. 小码哥教育java多少钱_小码哥教育java从0到高级架构师
  16. 不敢相信,技术栈,居然被P站秒了
  17. 用了pcl的地方, 程序直接崩溃 挂掉
  18. 一种具有17路可调PWM直流电机的串口遥控机器人
  19. css中a标签超链接在新窗口中打开以及超链接去除/添加下划线
  20. Hadoop 面试汇总

热门文章

  1. 蜂窝网络到底是什么?涂鸦蜂窝开发框架,搭配强大GPS助你打造创意产品
  2. Apache Log4j2远程代码执行漏洞风险紧急通告,腾讯安全支持全面检测拦截
  3. 后台重启不是重启服务器,是重启服务。
  4. 卸载java克隆虚拟机上传jdk文件
  5. 安卓虚拟机_你以为只有电脑才有虚拟机?手机虚拟机了解一下:原生安卓玩起来!...
  6. 没有core的程序异常退出追查过程
  7. 05【投资】成为富人的三个秘密
  8. python怎么定义名称_python 之 面向对象基础(定义类、创建对象,名称空间)
  9. wap2app双标题,如何禁用原生标题栏
  10. JAVA_SE_Day02