《Python开发 - Python开发笔记》Python打包(PyInstaller)
Posted Bruceoxl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Python开发 - Python开发笔记》Python打包(PyInstaller)相关的知识,希望对你有一定的参考价值。
开发环境:
系统:Windows10
Python环境:Anaconda集成开发环境
Python版本:3.8
在正式讲解本文之前,我们先来谈谈为什么要对Python程序打包?当手头Python脚本的运行环境要求不同,时间又紧急,处理数据时又要临时搭建环境,很是麻烦如果将Python脚本打包成可执行文件后会方便许多,也不用考虑运行环境的差异,随时随地运行。当然还有一个重要的原因就是,当我们想把自己的软件给他人用,但是又不想开放源代码,那么就需要打包了。
目前网上能获取的免费的Python打包工具主要有三种:py2exe、PyInstaller和cx_Freeze。其中py2exe计划开发支持python3.x版本,但是目前还没有完成。PyInstaller和cx_Freeze支持python3.X版本,也支持python2.X版本。笔者的Python版本是3.x,因此笔者只讲解PyInstaller和cx_Freeze的打包方法。
[ps]如果打包为exe的话,版本尽量选择python3.x+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。本文使用PyInstaller打包。
PyInstaller打包
1.1安装PyInstaller
首先你要有pip安装工具,一般2.7.9以上或者3.4以上版本都内置了pip工具。假如你没有,你就得需要安装,一般集成开发环境都有,笔者建议新手使用集成开发环境,能省不少麻烦。安装PyInstaller有两方式,在线安装和离线安装,笔者两种都讲,先说在线的。
1.1.1 PyInstaller在线安装
安装 PyInstaller 模块与安装其他 Python 模块一样,可以使用 pip 命令安装即可。在命令行输入如下命令:
#pip install pyinstaller
等待安装完成即可。
1.1.2 PyInstaller离线安装
如果在有网络的情况下,我是不建议离线安装的,毕竟PyInstaller关联安装包很多,漏掉一个或者版本不匹配都会导致pyinstaller安装失败。PyInstaller关联安装包如下:
future 0.18.2
地址:https://pypi.org/project/future/
pefile 2019.4.18
地址:https://pypi.org/project/pefile/
altgraph 0.17
地址:https://pypi.org/project/altgraph/
macholib
地址:https://pypi.org/project/macholib/
pywin32-ctypes 0.2.0
地址:https://pypi.org/project/pywin32-ctypes/
pyinstaller-hooks-contrib 2020.11
地址:https://github.com/pyinstaller/pyinstaller-hooks-contrib/releases
Pyinstaller 4.1
地址:https://github.com/pyinstaller/pyinstaller/releases/
【注1】安装上述离线包建议使用上述顺序安装,如果是压缩包也不用解压,安装使用以下命令:
#pip install xxx #xxx表示安装包的名字
值得注意的是,安装 PyInstalelr 需要加参数 --no-build-isolation,如下所示:
#pip install PyInstaller-4.1.tar.gz --no-build-isolation
【注2】Anaconda集成开发环境已近安装了future和pywin32-ctypes,只需要安装其他包即可。
【注3】安装过程中如果报错,则根据提示进行修改,一般都是缺少某个包,可直接在python库下载查找。
安装完成可使用以下命令查看版本:
#pyInstaller --version
1.2使用PyInstaller打包脚本
将Python脚本拷贝到PyInstaller文件夹
执行以下命令:
#pyinstaller -w xxx #xxx表示脚本名字
执行成功后会在目录内 dist 里可以找到生成的EXE文件
【注】Pyinstaller 常用的参数用法:
--distpath <path>: 打包到哪个目录下
-w: 指定生成 GUI 软件,也就是运行时不打开控制台
-c: 运行时打开控制台
-i <Icon File>: 指定打包后可执行文件的图标
--clean: 在构建之前清理PyInstaller缓存并删除临时文件
-D: 创建包含可执行文件的单文件夹包,同时会有一大堆依赖的 dll 文件,这是默认选项
-F: 只生成一个 .exe 文件,如果项目比较小的话可以用这个,但比较大的话就不推荐
【小贴士】打包后的文件过大问题
当你按照以上步骤打包后,发现打包后的文件很大,如果你安装的包越多,你打包后的文件也就越大,网上关于如何缩小打包后的文件大小的方法很多,比如使用虚拟环境打包,那是相当的复杂,笔者这里推荐一种简单粗暴的方法,就一个字 - 删!!!
【方法】一个一个删,针对文件夹可以整个删除,如果某个文件删除后软件不能运行,那么该文件就不能删。值得注意的是,该方法适用于打包生成的多个文件,因此不能加“-F”参数。
以上是关于《Python开发 - Python开发笔记》Python打包(PyInstaller)的主要内容,如果未能解决你的问题,请参考以下文章