python 打包EXE
注: 从个人博客园 移植而来
环境: Windows7 Python 2.7
参考:
使用pyinstaller打包python程序
Pyinstaller 打包发布经验总结
Using PyInstaller
简介
使用python引用第三方的各种模块编写一个工具后,如果想发给其他人,他们必须配置相关的环境才能使用,因此将python打包成exe就会方便许多。
我们可以使用Pyinstaller
,主要原理是:
读取你的python脚本,分析其代码以发现脚本执行所需的其它模块和库(依赖项),然后将这些文件的一起放到特定的单个文件夹或可执行文件中,生成exe执行文件。
官方文档:Document
配置
安装命令:
pip install pywin32 # pyinstaller会需求pywin32的某些接口
pip install pyinstaller
若在安装pyinstaller的时候,可能会报错。我们可进入官网下载
下载文件后,解压,cmd命令窗口进入到对应目录下 ;输入命令:python setup.py install
如此,pyinstaller的环境算是配置好了。验证的话
# 在cmd中输入命令,检测下版本号
pyinstaller -v # 或者通过pip,检测下包是否安装
pip list
简单使用
新建文件夹test,并编写一个简单的python文件,内容如下:
print("Hello PythonInstaller")
# 添加此处为了避免exe打开一闪而过
input()
在test中打开cmd窗口,输入命令:
# -F 表示生成结果是exe文件 -D表示结果生成一个目录
pyinstaller -F test.py '''
注意:
针对于单一的python文件,推荐使用 -F 命令,
若python文件调用了相关的资源文件,建议在生成exe的目录下将资源文件拷贝到该目录下,否则会报错
'''
cmd会在test文件夹下生成build,dist文件目录:
-
build: 用于存放pyinstaller运行的中间文件,文件夹内的warn文件用于记录打包时遇到的一些问题,可作为参考
-
dist: 用于存放生成的exe文件
注意:针对于单一的python文件,推荐使用-F
命令,若python文件调用了相关的资源文件,建议将资源文件拷贝生成的exe目录下,否则会报错。
比如,我有这样的在cmd窗口输入汉字生成拼图的工具,其目录为:
-
res: 放置了python拼图需要的.png或.jpg资源文件
-
HZK16 : 用于将汉字解析为矩阵的字库文件
-
tool.py : 执行脚本
在该目录下,打开cmd命令窗口,输入命令:
pyinstaller -F tool.py
命令会额外生成build,dist文件夹,此时我们需要将res,HZK16复制粘贴到dist目录下,然后点击tool.exe 才能执行成功。效果图为:
HZK16相关示例: 参考
复杂使用
一般情况下,我们将python打包exe会包含多个代码文件,资源等,故此我们需要了解下pyinstaller的命令。
参数 | 描述 | 命令 |
---|---|---|
-h | 显示帮助 | pyinstaller -h |
-v | 显示版本号 | pyinstaller -v |
-F | 生成一个exe文件,所有的依赖,资源和代码都打包到exe中 | pyinstaller -F test.py |
-D | 生成一个目录,包含所有的依赖,资源和exe | pyinstaller -D test.py |
–log-level LEVEL | LEVEL有5个等级,分别为: TRACE, DEBUG, INFO, WARN, ERROR用于控制编译时pyi打印的消息 | -F --log-level ERROR |
-n NAME | NAME为生成.exe和.spec的文件名,默认:执行脚本的名称 | -F test.py -n NewTest |
-p DIR | DIR为额外的import路径,若有多个,用“;”隔开 | |
–hidden-import NAME | pyi在分析的过程中,有些import没有分析出来,可使用此命令,且此命令可多次使用 | |
–exclude-modeule | pyi分析的相互关联的库,若某些库没用,可使用该命令,用于减少生成文件的大小 | |
–key KEY | KEY是用于加密python字节码的秘钥,一般为16的字符串 | |
-d | 调试使用,用于生成exe时,输出pyi的一些日志,有助于查错 | |
-c | 显示命令行窗口 | |
-w | 隐藏命令化窗口,可用于GUI程序 | |
-i NAME | NAME为应用程序的icon图标,windows上使用.ico Mac上使用.icns图标的获取可参考:https://www.easyicon.net/ | pyinstaller -F test.py -i icon.ico |
–version-file FILE | FILE为应用程序添加的版本信息文件 | |
-m FILE | FILE为应用程序添加的manifest文件 |
为了更便捷的打包exe,我们可以通过自定义配置.spec文件来完成打包。
# 在脚本的目录下都会生成指定的test.spec文件
pyinstaller -F test.py
pyinstaller -D test.py# 我们也可以这样生成,此种生成不会产生build,dist文件夹
# 官网:https://pyinstaller.readthedocs.io/en/stable/spec-files.html
pyi-makespec test.py
该文件实质上是可执行的python文件,pyInstaller通过相关的配置来构建应用程序。当spec文件构建后,其大多数命令选项
都编码在文件中,因此若在命令行中使用已包含的命令,将会被忽略。尚且有效的命令行选项有:
--upx-dir= --distpath= --workpath=
--noconfirm --ascii --clean
文件的显示内容如下:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None# 用于分析.py文件依赖的模块和库
a = Analysis(# scripts: 指定文件名的.py脚本列表,不同文件之间以","分割['test.py'],# 在sys.path之间搜索的可选路径列表,一般已生成.spec的默认目录为准pathex=['C:\\Users\\wangxuhe\\Desktop\\test'],# 附加二进制文件(.dll等)的可选列表,命令:--add-binarybinaries=[],# 要包含的附加数据文件的可选列表,命令:--add-datadatas=[],# 要包含的附加隐藏模块的可选列表,命令:--hidden-import MODULENAMEhiddenimports=[],# 用于搜索钩子的附加路径的可选列表,命令: --additional-hooks-dir HOOKSPATHhookspath=[],# 可选的脚本列表,用作用户的运行时挂钩。命令:--runtime-hook RUNTIME_HOOKS runtime_hooks=[],# 一个可选的模块或包名列表(它们的Python名),该列表将被忽略。命令:--exclude-module EXCLUDESexcludes=[],# 若为True,则不希望在搜索Windows SxS程序集时遵循版本重定向win_no_prefer_redirects=False,# 若为True,则将所有绑定的Windows SxS程序集更改为私有程序集以强制执行程序集版本win_private_assemblies=False,cipher=block_cipher,# 若为True,不要将源文件放在归档文件中,而是将它们作为单独的文件保存noarchive=False)# 用于创建包含所有python模块的Zlib,包含程序运行需要的所有依赖文件
pyz = PYZ(a.pure, # pyz的文件名a.zipped_data,# 用于加密python字节码的密码cipher=block_cipher)# 用于构建最终的执行文件,由Analysis和PYZ生成
exe = EXE(pyz,a.scripts,[],# 若为True,将exe构建转发给pkgexclude_binaries=True,# 可执行文件.exe的文件名name='test',# exe的图标资源icon='icon.ico',# 若为True,则可从执行文件获取调试信息debug=False,# window默认False,非windows使用,用于引导程序忽略可忽略的信息bootloader_ignore_signals=False,strip=False,upx=True,# 若为true,则显示控制台console=True)# 用于生成非执行文件外的文件夹,在单文件模式下不会调用,且该接口也可以没有故此不再描述
coll = COLLECT(exe,a.binaries,a.zipfiles,a.datas,strip=False,upx=True,upx_exclude=[],name='test')
未完待续…
相关文章:

python 打包EXE
注: 从个人博客园 移植而来 环境: Windows7 Python 2.7 参考: 使用pyinstaller打包python程序 Pyinstaller 打包发布经验总结 Using PyInstaller 简介 使用python引用第三方的各种模块编写一个工具后,如果想发给其他人&…...

CANopen概念总结、心得体会
NMT网络管理报文: NMT 主机和 NMT 从机之间通讯的报文就称为 NMT 网络管理报文。常见报文说明: 0101---------------网络报文发送Nmt_Start_Node,让电机进入OP模式(此时还不会发送同步信号) setState(d, Operational)------------------开启…...

【2】MYSQL数据的导入与导出
文章目录 MYSQL-库(相同库名称)的导入导出MYSQL-库(不同库名称)的导入导出MYSQL-表的导入导出MYSQL-表的指定查询记录导入导出前提: 客户端工具是:SQLyog MYSQL-库(相同库名称)的导入导出 1、选中指定库——右键,选择【将数据库复制到不同的主机/数据库】 2、选中指…...

Kaggle系列之CIFAR-10图像识别分类(残差网络模型ResNet-18)
CIFAR-10数据集在计算机视觉领域是一个很重要的数据集,很有必要去熟悉它,我们来到Kaggle站点,进入到比赛页面:https://www.kaggle.com/competitions/cifar-10CIFAR-10是8000万小图像数据集的一个子集,由60000张32x32彩…...

ESP-C3入门11. 创建最基本的HTTP请求
ESP-C3入门11. 创建最基本的HTTP请求一、menuconfig配置二、配置 CMakeLists1. 设置项目的额外组件目录2. 设置头文件搜索目录三、在 ESP32 上执行 HTTP 请求的基本步骤1. 创建 TCP 连接2. 设置 HTTP 请求3. 发送 HTTP 请求4. 接收 HTTP 响应5. 处理 HTTP 响应6. 关闭 TCP 连接…...

K8S+Jenkins+Harbor+Docker+gitlab集群部署
K8SJenkinsHarborDockergitlab服务器集群部署 目录K8SJenkinsHarborDockergitlab服务器集群部署1.准备以下服务器2.所有服务器统一处理执行2.1 关闭防火墙2.2 关闭selinux2.3 关闭swap(k8s禁止虚拟内存以提高性能)2.4 更新yum (看需要更新)2.5 时间同步2…...

看见统计——第四章 统计推断:频率学派
看见统计——第四章 统计推断:频率学派 接下来三节的主题是中心极限定理的应用。在不了解随机变量序列 {Xi}\{X_i\}{Xi} 的潜在分布的情况下,对于大样本量,中心极限定理给出了关于样本均值的声明。例如,如果 YYY 是一个 N(0&am…...

2023年2月访问学者博士后热门国家出入境政策变化汇总
近期关于出国的咨询量日益增多,出入境政策也是其中之一。所以本期知识人网小编汇总了最新访问学者和博士后关注的热门国家及地区入境政策变化,提供给大家。目前各国入境政策大致分为三种:一、 无法入境的国家如:摩洛哥、朝鲜等。二…...

“离开浪浪山”是假象,80%年轻人下班后还在学习,真实是想先上个山。
最近,又有一个关于年轻人与职场的新词横空出世—— 浪浪山。 什么是浪浪山? 每个人心中都有一座浪浪山。 浪浪山,其实是人生的一种状态,步入社会时满腔热血,然而很快就被现实给修理了一顿;想要辞职不干出去…...

Kotlin 33. CompileSdkVersion 和 targetSdkVersion 有什么区别?
CompileSdkVersion 和 targetSdkVersion 有什么区别? 在 build.gradle (Module) 文件中,我们通常会看到 CompileSdkVersion 和 targetSdkVersion 的使用,比如下面是一个完整的 build.gradle (Module) 文件: plugins {id com.and…...

实用调试技巧——“C”
各位CSDN的uu们你们好呀,今天小雅兰的内容是实用调试技巧,其实小雅兰一开始,也不知道调试到底是什么,一遇到问题,首先就是观察程序,改改这里改改那里,最后导致bug越修越多,或者是问别…...

JavaScript - 函数
文章目录一、箭头函数二、函数名三、理解参数3.1 箭头函数中的参数四、没有重载五、默认参数值5.1 默认参数作用域与暂时性死区六、参数扩展与收集6.1 扩展参数6.2 收集参数七、函数声明与函数表达式八、函数作为值九、函数内部9.1 arguments9.2 this9.3 caller9.4 new.target十…...

Cesium 卫星轨迹、卫星通信、卫星过境,模拟数据传输。
起因:看了cesium官网卫星通信示例发现只有cmzl版本的,决定自己动手写一个。欢迎大家一起探讨,评论留言。 效果 全部代码在最后 起步 寻找卫星轨迹数据,在网站space-track上找的,自己注册账号QQ邮箱即可。 卫星轨道类…...

2023年湖北中级职称(工程类建筑类)报名条件和要求是什么?
2023年湖北中级职称(工程类建筑类)报名条件和要求是什么? 中级职称分为计算机类、医药类、卫生类、教师类、工程类、经济类等各大类,今天主要就是跟大家说一下工程类中级职称评审的一个条件和要求,这也是评职称人员应该…...
socket编程复习
再次用到socket编程,将socket相关的知识点做了简单整理,根据网络上大家的整理,又做了一些调整和汇总。 API列表 sokect常见的API大致有列表里面这么多,不同平台的实现可能有些微的差别,下面对常用API的参数和用法做了…...

深度学习神经网络基础知识(三)前向传播,反向传播和计算图
专栏:神经网络复现目录 深度学习神经网络基础知识(三) 本文讲述神经网络基础知识,具体细节讲述前向传播,反向传播和计算图,同时讲解神经网络优化方法:权重衰减,Dropout等方法,最后进行Kaggle实…...

一图说明 monorepo 落地流程方案
关于 monorepo 初次讨论已有2年载,目前团队已经沉淀了成熟的技术方案且经受住了实战考验。所以特梳理相关如下: 也算是关于之前发起的 monorepo–依赖 的解答篇。 上图为目前团队贡献的主流程:① 本地开发 > ② 提交Git仓库 > ③ 触发…...
SAP ABAP WRITE语法大全
列表是ABAP/4报表程序数据的输出媒介。每个ABAP/4报表程序将其输出数据传递到直接与该程序连接的列表中。每个程序最多生成21个列表:1个基本列表和20个辅助列表。 将数据写入列表的基本ABAP/4语句是WRITE、SKIP和ULINE输出语句。 一、标准列表结构 (1&…...
微信小程序自定义全局组件showModal
开发过程中微信提供的showmodal样式不符合ui风格,又不想写成组件用的页面都引入,就考虑模拟showmodal写一个自定义的弹框组件 一,在components中新建一个navModal组件 navModal.wxml <view class="modal_mask" hidden={{hidden}}><view class="mo…...
4|无线传感器网络与应用|无线传感器网络原理及方法-许毅版|考试知识点
《无线传感器网络原理及方法》第1章无线传感器网络概述1.1无线传感器网络的基本概念1.2无线传感器网络的特征1.2.1与现有无线网络的区别1.2.2与现场总线的区别1.2.3传感器节点的限制1.2.4传感器组网的特点1.3无线传感器网络的关键性能指标1.4无线传感器网络的应用1.5无线传感器…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...