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无线传感器…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...