pyinstaller 将python程序打包为可执行文件exe
文章目录
pyinstaller简介
PyInstaller is a program that freezes (packages) Python programs into stand-alone executables, under Windows, Linux, Mac OS X, FreeBSD, Solaris and AIX. Its main advantages over similar tools are that PyInstaller works with Python 2.7 and 3.3—3.5, it builds smaller executables thanks to transparent compression, it is fully multi-platform, and use the OS support to load the dynamic libraries, thus ensuring full compatibility.
简言之,pyistaller可以读取编写好的python脚本,分析其中调用的模块和库,然后收集这些文件的副本(包括Python的解释器)。最后把副本与脚本,可执行文件等放在一个文件夹中,或者可选的封装在一个可执行文件中。
pyinstaller在Windows平台上的使用环境:
Python:2.7 and 3.4~3.7
相关参数
参数 | 功能 |
---|---|
-F,-onefile | 打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用 |
-K,-tk | 在部署时包含TCL/TK |
-D,-onedir | 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护 |
-a,-ascii | 不包含编码.在支持Unicode的python版本上默认包含所有的编码. |
-d,-debug | 产生debug版本的可执行文件 |
-w,-windowed,-noconsole | 使用windows子系统执行,当程序启动的时候不会打开命令行 |
-icon=<FILE.EXE,N> | 将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效) |
-v FILE, –version=FILE | 将verfile作为可执行文件的版本资源(只对Windows系统有效) |
-n NAME, –name=NAME | 可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字 |
-p DIR, –path=DIR | 设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径,让pyinstaller自己去找程序需要的资源 |
打包流程
第一步,安装pyinstaller
pip install pyinstaller
第二步,打开命令行,进入要打包的主程序目录下,在命令行中输入:
pyi-makespec -main.py
回车,生成对应的main.spec文件。打开设置配置属性
第三步,执行打包命令
pyinstaller main.spec
#这里加不加参数都可以,参数的本质就是spec里的配置属性
打包后多了build,dist目录,dist目录下存放着最终可发布的打包目录和可执行文件main.exe
规范说明
常见问题
1. RecursionError: maximum recursion depth exceeded
出现在pyinstaller打包时的问题,中文意思是超出最大递归深度,解决方法:退至低版本的python可以解决,原因还是兼容性,
比如:pyinstaller3.4+python 3.6.6失败
而
pyinstaller3.3.1+python 3.6.5成功
2.双击程序 Failed to excute Script main
本质上还是模块缺失了,建议使用-c模式重新打包调试,找到缺失的模块pip install即可解决
3.文件打包后过大的问题
这个问题本质上其实是没办法解决的,因为pyinstaller不是编译,而是将py程序与相应的库打包成可执行文件,大小和速度是和你调用的库的大小与速度成正比的,所以在写python程序的过程中尽量不要使用import,而是用from…import…来减少调用。如果是import的话,在打包的时候,会将整个包都打包到exe里面,没有意义的增大了工具的大小!
防止反编译的问题
按上述步骤打包的程序是容易被反编译为pyc然后破译出main入口的源码的,
为了安全起见,可以通过工具把py转为pyd来调用后打包
链接:http://www.lizenghai.com/archives/898.html
推荐阅读
-
pyinstaller 将python程序打包为可执行文件exe
-
python文件打包为.exe可执行文件
-
将python程序打包为exe可执行文件
-
python随笔:用pyinstaller 将python代码打包成exe执行文件
-
利用pyinstaller将py文件打包为exe
-
关于如何使用pyinstaller把python脚本打包成windows exe 可执行程序(相关程序内附有网盘)
-
详解如何将python3.6软件的py文件打包成exe程序
-
【Python】将python3.6软件的py文件打包成exe程序
-
【Python】将python3.6软件的py文件打包成exe程序
-
Windows下用py2exe将Python程序打包成exe程序的教程