基于Pyinstaller打包Python程序并压缩文件大小

这段时间应老师的要求,给实验室写了一个基于 PyQt5 的小工具。然而源码发过去人家还不要,一定要打包成可执行软件。

那就打包呗,刚好以前对 Pyinstaller 有一点接触,就用了一下这玩意。这篇博文主要记录一下基本用法和踩得一些坑。

1. 用 Pyinstaller 打包 Python 程序

首先我们需要安装 Pyinstaller:

pip install pyinstaller

用 conda 也行,不过貌似最近清华的 Anaconda 源被封了,也不知道什么时候解禁。

Pyinstaller 用法很简单,在对应的主调 py 文件的目录下,运行:

pyinstaller [<args>] Target.py

介绍一下 Pyinstaller 常用的参数用法:--distpath <path>: 打包到哪个目录下-w: 指定生成 GUI 软件,也就是运行时不打开控制台-c: 运行时打开控制台-i <Icon File>: 指定打包后可执行文件的图标--clean: 在构建之前清理PyInstaller缓存并删除临时文件

关于打包成什么样,有两种选择:

-D: 创建包含可执行文件的单文件夹包,同时会有一大堆依赖的 dll 文件,这是默认选项-F: 只生成一个 .exe 文件,如果项目比较小的话可以用这个,但比较大的话就不推荐

最后来看看我使用的参数:

pyinstaller --distpath Release/ -w -i x.ico --clean main.py

如果不指定 --dispatch 的话,最后会默认发布到 dis 目录下,进入目录后,就可以看到打包好的软件:

怎么样,看上去是不是就和正规软件一毛一样了!

不过还没完,因为软件有可能运行不了。

2. 加入依赖项

当我兴冲冲地去运行程序时,出现了这么一个玩意:

Failed to excute script xxx

啥?为啥会这样。其实这种情况往往是缺少了一些依赖项导致的。以我的例子来说,我的项目中有一个 config.yaml 文件需要在运行时读取,然而 Pyinstaller 是不会帮你把这些依赖项目也打包的。

解决办法很简单,手动把依赖项目复制进目录下就可以了。

OK!到此为止就完——了吗?

NO!因为我遇到了一个很恶心的问题,打包出来的程序居然足足有 600 多 M!坑人呐这不是!

我苦思冥想不知道是怎么回事,转眼一看,发现了一些不对劲的地方。

Excuse me? 我啥时候用过 Numpy 了?我转眼一想就明白了,肯定是这货偷偷把一些不相干的库也打包进来了。后来我上网上一查,有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。”

我用的方法是使用 pipenv 来打包。

3. 使用 Pipenv

Pipenv 是一款管理虚拟环境的命令行软件,简单来讲,它可以创建一个只在某个目录下的局部 Python 环境,而这个环境是可以和全局环境脱离开的。

步骤如下:

安装 Pipenv

pip install pipenv

选一个好目录做我们的虚拟环境,然后在该目录下:

pipenv install --python 3.7

这样就可以在目录下创建一个局部的环境了,我这里设为 3.7 是因为我自己用的是 3.7,具体设什么根据自己的情况来定。

在命令行下激活环境

pipenv shell

输入这个命令,我们就进入到了新建的虚拟环境。如果你这时候使用命令 pip list 并发现里面只有很少的库,这就说明我们成功进入虚拟环境了(有点像 Conda)。

安装依赖的库

在虚拟环境下安装 Pyinstaller 和你自己的脚本依赖的第三方库,比如我的就是:

pipenv install pyinstallerpipenv install pyqt5pipenv install pymysqlpipenv install geopy

再次查看 pip list 时,如果都成功安装好了,我们就可以开始打包了。

把你的脚本放到这个目录下面,运行 pyinstaller,方法同前

这时我们就会用虚拟环境下的 pyinstaller 来打包库,由于这个环境比较纯净,所以即便它想乱打包其他的库也打包不了。

打包完毕后,你就会发现,很明显干净多了:

再一看,一共 90 M,足足缩小了 6 倍多。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

    本文介绍一个exe打包工具pyinstaller,使用非常简单.方便,而且还跨平台. 软硬件环境 Windows 10 64bit PyQt5 Anaconda with python 3.6.5 pyinstaller apscheduler sqlalchemy pyinstaller安装 命令行中执行 pip install pyinstaller pyinstaller打包exe 示例还是以之前的为例,解压进入工程目录,命令行执行打包命令 pyinstaller -F --distpat

  • Python中用pyinstaller打包时的图标问题及解决方法

    前言 因为昨天重新研究了下python的打包方法,今天一番准备把之前写的一个pdf合并软件重新整理一下,打包出来. 但在打包的过程中仍然遇到了一些问题,半年前一番做打包的时候也遇到了一些问题,现在来看,解决这些问题思路清晰多了,这里记录下. 问题 打包成功,但运行时提示Failed to execute script xxx.这里又分很多种原因,这时不要用-w打包,然后在终端.\xxx.exe的方式运行,就可以看到输出日志了. 原因一 D:\02-python\2019-09-30_pdf_op

  • 利用pyinstaller或virtualenv将python程序打包详解

    运行环境: CentOS6.5_x64 Python版本 : 2.6 使用pyinstaller打包 pyinstaller可以将python程序打包成二进制文件,打包后的文件在没有python的环境中也可以执行(但要有相关底层libc相关so文件).pyinstaller支持将python程序打包成单个文件,它所做的只是将文本转换成二进制,并不能给python提速,相反还会影响打包后程序的运行速度. 安装pyinstaller 官方网址:http://www.pyinstaller.org/

  • python-pyinstaller、打包后获取路径的实例

    使用pyinstaller可以把.py文件打包为.exe可执行文件,命令为: pyinstaller hello.py 打包后有两个文件夹,一个是dist,另外一个是build,可执行文件在dist文件夹里面,但是会有许多依赖是独立文件存在 pyinstaller -F hello.py 使用-F参数后,打包的可执行文件是一个整体,只有一个.exe文件. 获取文件路径的方式有四种,可以在打包成exe文件后,获取.exe文件的当前路径 import sys import os print(sys.

  • Python打包方法Pyinstaller的使用

    Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库.(Python官方的各种安装包就是这样做的) .pyc文件:有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是Python解释器可以识别的二进制码,故发布后也是跨平台的,需要使用者安装相应版本的Python和依赖库. 可执行文件:对于非码农用户或者一些小白用户,你让他装个Pyth

  • python学习笔记--将python源文件打包成exe文件(pyinstaller)

    pyinstaller 库的使用 PyInstaller是一个十分有用的第三方库,它能够在Windows.Linux.Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个独立文件方便传递和管理.PyInstaller 需要在命令行(控制台)下用pip 工具安装,如下: :\>pip install pyinstaller 或 :\>pip3 install pyinstaller PyInst

  • 用PyInstaller把Python代码打包成单个独立的exe可执行文件

    之前就想要把自己的BlogsToWordpress打开成exe了.一直没去弄. 又看到有人提到python打开成exe的问题. 所以打算现在就去试试. 注:此处之所有选用BlogsToWordpress,是因为此python脚本够复杂,依赖的模块够多. 如果这个都搞定了,那么其他单个的python文件,和小python项目的打包,就更不成问题了. 1.先去找找,目前主流有哪几种方法. 找到几个名字 cx_Freeze PyInstaller py2exe 2.关于py2exe和PyInstall

  • python pyinstaller打包exe报错的解决方法

    今天用python 使用pyinstaller打包exe出现错误 环境pyqt5 + python3.6 32位 在导入pyqt5包之前加上如下代码 import sys import os if hasattr(sys, 'frozen'): os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH'] from PyQt5.QtWidgets import QApplication, QMainWindow from py

  • 基于Pyinstaller打包Python程序并压缩文件大小

    这段时间应老师的要求,给实验室写了一个基于 PyQt5 的小工具.然而源码发过去人家还不要,一定要打包成可执行软件. 那就打包呗,刚好以前对 Pyinstaller 有一点接触,就用了一下这玩意.这篇博文主要记录一下基本用法和踩得一些坑. 1. 用 Pyinstaller 打包 Python 程序 首先我们需要安装 Pyinstaller: pip install pyinstaller 用 conda 也行,不过貌似最近清华的 Anaconda 源被封了,也不知道什么时候解禁. Pyinsta

  • 如何利用pyinstaller打包Python程序为exe可执行文件

    序 对于如何将py文件打包生成exe可执行文件最简单的应该我觉得就是使用pyinstaller第三方模块 下面我就分为三个步骤给大家讲解如何使用 并分享一点小技巧 下面直接进入分享啦 安装pyinstaller第三方库 既然要安装第三方库,当然离不了pip install啦 直接使用pip install pyinstaller就可以安装啦 (不过这样似乎遇到第三方模块比较大的话就很慢甚至无法成功安装啦 ) 安装第三方库的小技巧 当然有解决办法呀 那就是使用国内镜像源 添加后就像是开挂了的 pi

  • 使用pyinstaller打包python PyQt5程序

    目录 准备 工具准备 源代码准备 打包 参数说明 针对PyQt应用的改进 目前的小问题 解决办法 再次打包 代码仓库说明 当你有打包你的python应用的需求以后,你可能会像搜索引擎寻求帮助,你或许曾经搜索过"python 转 exe","python打包"等等这样的字眼,你或许曾看到过各种各样的相关解决方案,本文介绍的是其中的一种,但是可以负责任的说,这是目前最好的方案,并且是跨平台最好的方案,也就是说使用这个叫pyinstaller的工具,你可以把同样的代码打包

  • pyinstaller将python程序打包为可执行文件

    目录 前言 pyinstaller简介 pyinstaller下载 pyinstaller使用 准备好程序代码 打包程序 小结 前言 对于专业的python程序员来说,python打包工具或许用得并不多.但是对于非专业人士来说,你给他写个python项目,要让他安装python.安装依赖等等,估计人都会抓狂.或者说,如果你不想暴露自己的项目代码,python打包工具就派上用场了,市面上有多种打包工具,这里就讲讲最常用的pyinstaller的使用方法吧. pyinstaller简介 pyinst

  • pyinstaller打包exe程序的步骤和添加依赖文件的实现

    目录 pyinstaller打包exe程序和添加依赖文件 1.安装pyinstaller库 2.pyinstaller的打包机制 3.打包命令 4.添加导包外的一些依赖文件 5..spec方式打包 6.pyinstaller常用参数 pyinstall打包时的依赖问题 pyinstaller打包exe程序和添加依赖文件 或许我们并不是专业的程序猿,但是却可以通过python来提高我们的工作效率,减少加班时间,让代码替我们完成一些重复的工作,节省下来的时间去泡个妹子,牵牵小手不香吗 话不多说,马上

  • 使用pyinstaller打包PyQt4程序遇到的问题及解决方法

    python pyinstaller pyqt4 打包 QWindows 最近在做课设,用pyqt设计界面.然后用pyinstaller打包程序后,双击运行却总是闪退,后来将exe文件拖到cmd窗口运行,提示错误信息为 This application failed to start because it could not find or load the Qt platform plugin "windows". 废话不多说直接上解决办法. 进入你安装pyqt的路径,找到 ./pl

  • 解决pyinstaller打包运行程序时出现缺少plotly库问题

    用pyinstaller打包tkinter程序,打包后运行exe是报如下错误: 搜索一阵发现是pyinstaller在打包的时候(StartRun.py我要打包的主程序文件)可能会漏掉一些三方库,就在打包的时候加上三方库的绝对路径: pyinstaller StartRun.py -F -p C:\Python36\Lib\site-packages 发现打包完之后还是会报以上问题,继续搜索后用添加hook文件的方式可以解决(彻底解决了我的问题),修改方法: 1.找到C:\Python36\Li

  • python3.9实现pyinstaller打包python文件成exe

    简述 1.python python作为一门解释型脚本语言,它有三种发布方式: 文件 : 源码文件,运行需要使用者安装Python环境并且安装依赖的各种库 pyc文件:pyc文件是Python解释器可以识别的二进制码,可跨平台的,需要使用者安装相应版本的Python和依赖库. 可执行文件:不需要安装python环境和依赖库,可针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,-) 2.pyInstaller PyInstaller工具可以把python解析器和脚本打包成一

  • 教你使用pyinstaller打包Python教程

    一.单个文件打包 1.1 简单打包 例如现在有一个main.py文件内容如下 import os print("hello world") os.system("pause") 运行结果如图 现在用一下命令打包成一个可执行文件pyinstaller -F main.py 再同级目录下生成一个dist文件夹里面就会生成一个可执行文件,双击就可以执行 1.2 带图标打包 有的时候为了美观,可以给可执行文件加一个图标,这时用这个命令pyinstaller -F main.

随机推荐