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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值