有时候你做好了一个小游戏或者小程序想要打包发送给别人玩或者用的时候,直接发过去,如果别人没有python环境的话,那肯定是用不了的,这时候你需要将程序打包成exe程序。
将python打包成exe的方法有两种,一种是pyinstaller,另一种是py2exe.
两者各有优缺点,不过现在大部分都使用pyinstaller去打包exe,为什么不用py2exe,后面你就知道了。
关于pyinstaller
首先是用pyinstaller去打包python程序,这里我用的python程序是python---贪吃蛇的代码。
要使用pyinstaller,首先先安装pywin32,然后再安装pyinstaller,安装方法直接用pip安装即可。pyinstaller也是支持python3.7的,所以可以放心使用,但是对于其他的库,可能就会有版本问题,所以很容易出错。
pip install pywin32
pip install pyinstaller
安装pyinstaller好后
使用pyinstaller的方法也很简单,用cmd窗口也行,这里我用的是在pycharm里,如果用cmd的话需要先cd到项目的目录下面,然后在输入
pyinstaller -F -w 程序名.py。在pycharm环境下, 首先打开terminal。
然后这里本身就是项目文件下面了,所以不用cd过去,直接在这里输入,pyinstaller -F -w 程序名.py
然后等待出现成功字样即可
这样就打包成功了。然后去项目文件下,会发现新增了三个东西,两个文件夹和一个spec文件
然后我们的exe文件就在dist文件下面,双击打开就可以运行了。
因为没加图标,所以这里默认是这个图标,当然可以自己修改。
下面是一些常用的命令
-h,--help | 查看该模块的帮助信息 |
---|---|
-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 的名字 |
如果还想要去查看更详细的指令,可以用pyinstaller -h查看
所以根据上表,创建单个执行文件,且不显示命令行窗口的程序就是
pyinstaller -F -w 程序名.py
如果想要给程序换一个图标可以加个-i
pyinstaller -F -w -i 图标文件名 程序名.py
打包后之后你的项目会出现两个文件夹,分别是build和dist,以及一个spec文件。
有时候打包之后会出现这个问题,
在我这里就是版本问题,把numpy回退一下版本,换成低一点的版本即可。
有的时候可能是因为没有模块之类的,你可以将-w去掉,然后就可以看弹出的命令行窗口显示的是什么错误,解决后重新打包即可。
当你运行打包后的程序出错的时候,可以去pyinstaller的官方手册下面查看,是否有一致的问题。
官方手册:https://pyinstaller.readthedocs.io/en/stable/when-things-go-wrong.html
正如我刚刚说的,他这里提供了一些debug的方法。
我们打包的时候会出现的一个spec文件,
一个spec文件的内容:
这是一个规范文件,摘手册的话来说就是:
当你执行
pyinstaller
选项 ..myscript.py
PyInstaller做的第一件事就是构建一个规范(规范)文件 myscript.spec
。该文件存储在--specpath=
目录中,默认为当前目录。
spec文件告诉PyInstaller如何处理你的脚本。它对脚本名称和您为pyinstaller
命令提供的大多数选项进行编码。spec文件实际上是可执行的Python代码。 PyInstaller通过执行spec文件的内容来构建应用程序。
对于PyInstaller的许多用途,您不需要检查或修改spec文件。通常足以将所有需要的信息(例如隐藏的导入)作为pyinstaller
命令的选项并让它运行。
如果你想要进行更加的复杂的添加数据文件,使用模块中的数据文件,都需要用spec文件,可以通过阅读他的官方手册
https://pyinstaller.readthedocs.io/en/stable/spec-files.html
关于PY2exe
关于py2exe,在python3.7的环境下可以下载,但是并不能使用,由于我的虚拟机问题很多,所以就没有去验证py2exe的使用方法。
py2exe的打包方法是要创建一个python程序进行打包的
例如
from distutils.core import setup
import py2exe
setup(windows=["snake.py"])
具体的内容可以去py2exe的官网阅读
http://www.py2exe.org/index.cgi/FrontPage
版本太过老旧了,本来我打算用虚拟机下载一个旧版本的python去打包一下的,可是py2exe并不支持其他操作系统仅支持windows