当前位置: 首页 > article >正文

#python项目生成exe相关了解

在 Windows 上将 Python 项目 生成 EXE 可执行文件,主要使用 pyinstaller。以下是完整步骤:


📌 1. 安装 PyInstaller

pip install pyinstaller

如果已安装,可执行以下命令检查版本:

pyinstaller --version

📌 2. 进入 Python 项目目录

cd your_project_directory

确保 main.py 是项目的入口文件


📌 3. 生成 EXE 文件

✅ 单文件模式(适用于小型项目)

pyinstaller --onefile main.py
  • --onefile:生成 单个 EXE 文件,所有依赖会被打包进这个 EXE。

✅ 目录模式(适用于大型项目,减少 EXE 启动时间)

pyinstaller -D main.py
  • -D--onedir):将 EXE 及所有依赖放入 dist/ 目录。

✅ 无控制台模式(GUI 应用)

如果你的程序是 图形界面(如 PyQt、Tkinter),可以隐藏终端窗口:

pyinstaller --onefile --windowed main.py
  • --windowed-w):不显示终端黑窗口,仅适用于 GUI 程序。

✅ 指定图标

pyinstaller --onefile --windowed --icon=myicon.ico main.py
  • --icon=myicon.ico:EXE 使用指定图标。

📌 4. 运行生成的 EXE

生成的文件位于 dist/ 目录:

cd dist
main.exe

可直接拷贝 main.exe 到其他 Windows 电脑运行(无需 Python 环境)。


📌 5. 解决 EXE 运行问题

🔹 避免 EXE 被误报为病毒

  • 原因:PyInstaller 使用 UPX 压缩,部分杀毒软件误判。
  • 解决
    pyinstaller --onefile --noconsole --noupx main.py
    
    • --noupx:禁用 UPX 压缩。

🔹 修复 EXE 运行时报 Failed to execute script

尝试 清理缓存后重新打包

pyinstaller --clean --onefile main.py

🔹 依赖模块丢失

如果运行时提示 ModuleNotFoundError,需要手动指定:

pyinstaller --onefile --hidden-import=<module_name> main.py

📌 6. 让 EXE 更便携

如果要 支持拷贝到其他电脑直接运行

pyinstaller --onefile --add-data "config.json;." --add-data "assets/;assets/" main.py
  • --add-data:确保额外资源(如配置文件、图片)一并打包。

📌 7. 结论

  1. 安装 PyInstaller
  2. 进入 Python 项目目录
  3. 执行 pyinstaller 生成 EXE
  4. 拷贝 dist/main.exe 到其他电脑直接运行 🚀

🎯 适用于 Tkinter、PyQt、PySide、pygame 等 GUI 应用,打包后可脱离 Python 运行!

pyinstaller 命令中,--add-data 选项用于将额外的文件或目录打包到 EXE 文件中。




📌 解释 "config.json;." 的含义

--add-data "config.json;."

拆解说明

  • config.json:指的是当前目录下的 config.json 文件(打包前的位置)。
  • .(分号 ; 后面的 .):表示打包后,这个文件应该放到 EXE 解压后的 工作目录(运行时的 sys._MEIPASS 目录)。

📌 作用
👉 config.json 在 EXE 运行时仍然可用,就像它原本在当前目录一样。


📌 解释 "assets/;assets/"

--add-data "assets/;assets/"

拆解说明

  • assets/:打包前的文件夹路径(当前目录下的 assets/ 文件夹)。
  • assets/(分号 ; 后面的路径):表示打包后,它仍然应该放到 assets/ 这个目录里。

📌 作用
👉 确保 assets/ 目录及其所有内容都被正确打包,并在运行 EXE 时保持相对路径不变。


📌 为什么用分号 ;

🔹 在 Windows 下,PyInstaller 需要使用 ; 分隔源路径和目标路径(Linux/macOS 用 :)。
🔹 在 macOS/Linux 上,写法如下

--add-data "config.json:."
--add-data "assets/:assets/"

📌 代码示例:正确读取 config.json

打包后,EXE 运行时,所有被 --add-data 选项打包的文件会存放在 sys._MEIPASS 目录。
因此,你需要修改代码,动态获取文件路径:

import os
import sys
import json# 获取资源文件的正确路径
def resource_path(relative_path):"""在开发环境返回原路径,在 EXE 运行时返回打包路径"""if getattr(sys, 'frozen', False):# 运行时(EXE模式)base_path = sys._MEIPASSelse:# 开发环境base_path = os.path.abspath(".")return os.path.join(base_path, relative_path)# 读取 config.json
config_path = resource_path("config.json")with open(config_path, "r", encoding="utf-8") as f:config = json.load(f)print("配置内容:", config)

📌 结论

选项含义
config.json;.config.json 放在 EXE 运行时的当前目录
assets/;assets/把整个 assets/ 目录打包,并保持其路径

🛠 这样做的好处

  1. 确保 EXE 运行时能找到这些文件
  2. 打包后,仍然可以使用 config.jsonassets/ 目录
  3. 支持跨平台(Windows 需要 ;,Linux/macOS 需要 :)。

🚀 这样打包后,EXE 运行时就能正确访问这些资源文件了!




📌 pyinstaller -D main.py 适用于大项目吗?

🔹 结论:可以,但建议做额外优化! 🚀
pyinstaller -D main.py (等价于 --onedir生成一个 dist/ 目录,包含 EXE 及所有依赖文件,适用于大项目,但可能会遇到以下问题:


📌 1. 适用于大项目的正确做法

对于大项目,推荐使用目录模式(-D)+ 额外参数优化

pyinstaller -D --hidden-import=<module> --add-data "config.json;." --add-data "static/;static/" main.py

✅ 关键优化点

选项作用
-D / --onedir默认模式,在 dist/ 目录生成多个依赖文件,不压缩,启动快
--hidden-import=<module>如果 PyInstaller 误报缺少依赖,可手动添加
--add-data打包额外资源(如 config.jsonstatic/ 目录)
--clean清理历史缓存,避免异常
--log-level=DEBUG调试模式,帮助排查问题

📌 2. 可能遇到的问题及解决方案

🔹 1. EXE 运行时报 ModuleNotFoundError

原因pyinstaller 可能漏掉了一些动态导入的库(如 importlibcv2tensorflow)。
解决方案

pyinstaller -D --hidden-import=<缺失模块> main.py

示例(补充 pandas 相关依赖):

pyinstaller -D --hidden-import=pandas._libs.tslibs main.py

🔹 2. 运行后找不到 config.jsonstatic/ 等资源

原因PyInstaller 默认不会打包非 Python 代码的文件
解决方案:手动指定:

pyinstaller -D --add-data "config.json;." --add-data "static/;static/" main.py

📌 特别注意:

  • Windows 使用 ; 分隔源路径和目标路径(config.json;.)。
  • Linux/macOS 使用 :config.json:.)。

🔹 3. dist/ 目录过大,EXE 体积太大

原因:大项目依赖多,打包会包含整个 Python 运行环境。
解决方案

  1. 排除不必要的库
    pyinstaller -D --exclude-module numpy main.py
    
  2. 使用 UPX 压缩
    pyinstaller -D --upx-dir=UPX_PATH main.py
    
    注意:某些杀毒软件会误报 UPX 压缩的 EXE 为病毒,慎用!

🔹 4. EXE 运行时报 Failed to execute script

解决方案

pyinstaller -D --clean main.py

📌 如果仍然报错,请检查:

  • 是否使用了相对路径(可以用 sys._MEIPASS 获取 PyInstaller 运行时目录)。
  • 是否缺少必要的 --hidden-import

📌 3. 总结

pyinstaller -D main.py 适用于大项目,但建议做以下优化

  1. --add-data,确保资源文件被正确打包。
  2. --hidden-import,避免 ModuleNotFoundError
  3. 使用 --clean 清理,防止历史缓存导致问题。
  4. 优化 EXE 体积,可用 --exclude-moduleUPX 压缩。

🎯 最终推荐命令

pyinstaller -D --hidden-import=<module> --add-data "config.json;." --add-data "static/;static/" --clean main.py

🚀 这样能保证大项目正确打包,且运行时不会报错!

相关文章:

#python项目生成exe相关了解

在 Windows 上将 Python 项目 生成 EXE 可执行文件&#xff0c;主要使用 pyinstaller。以下是完整步骤&#xff1a; &#x1f4cc; 1. 安装 PyInstaller pip install pyinstaller如果已安装&#xff0c;可执行以下命令检查版本&#xff1a; pyinstaller --version&#x1f4c…...

Opencv计算机视觉编程攻略-第九节 描述和匹配兴趣点

一般而言&#xff0c;如果一个物体在一幅图像中被检测到关键点&#xff0c;那么同一个物体在其他图像中也会检测到同一个关键点。图像匹配是关键点的常用功能之一&#xff0c;它的作用包括关联同一场景的两幅图像、检测图像中事物的发生地点等等。 1.局部模板匹配 凭单个像素就…...

JSON-lib考古现场:在2025年打开赛博古董店的奇妙冒险

各位在代码海洋里捡贝壳的探险家们&#xff01;今天我们要打开一个尘封的Java古董箱——JSON-lib&#xff01;这货可是2003年的老宝贝&#xff0c;比在座很多程序员的工龄还大&#xff01;准备好穿越回Web 1.0时代&#xff0c;感受XML统治时期的余晖了吗&#xff1f; &#x1f…...

Android: Handler 的用法详解

Android 中 Handler 的用法详解 Handler 是 Android 中用于线程间通信的重要机制&#xff0c;主要用于在不同线程之间发送和处理消息。以下是 Handler 的全面用法指南&#xff1a; 一、Handler 的基本原理 Handler 基于消息队列(MessageQueue)和循环器(Looper)工作&#xff0c…...

汇编学习之《push , pop指令》

学习本章前线了解ESP, EBP 指令 汇编学习之《指针寄存器&大小端学习》-CSDN博客 栈的特点&#xff1a; 好比一个垂直容器&#xff0c;可以陆续放入物体&#xff0c;但是先放的物体通常会被后面放的物体压着&#xff0c;只有等上面后放的物品拿出来后&#xff0c;才能…...

Python循环控制语句

1. 循环类型概述 Python提供两种主要的循环结构&#xff1a; while循环 - 在条件为真时重复执行for循环 - 遍历序列中的元素 2. while循环 基本语法 while 条件表达式:循环体代码示例 count 0 while count < 5:print(f"这是第{count1}次循环")count 13. f…...

微信小程序(下)

目录 在事件处理函数中为 data 中的数据赋值 事件传参 bindinput 的语法格式 实现文本框和 data 之间的数据同步 条件渲染 结合 使用 wx:if hidden wx:if与 hidden 的对比 wx:for 手动指定索引和当前项的变量名 wx:key 的使用 WXSS 和 CSS 的关系 什么是 rpx 尺寸…...

【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…...

vector的介绍与代码演示

由于以后我们写OJ题时会经常使用到vector&#xff0c;所以我们必不可缺的是熟悉它的各个接口。来为我们未来作铺垫。 首先&#xff0c;我们了解一下&#xff1a; https://cplusplus.com/reference/vector/ vector的概念&#xff1a; 1. vector是表示可变大小数组的序列容器…...

ubuntu 22.04 解决LXC 报错CGroupV1 host system

解决CGroupV1 host system 报错 echo "cgroupv1 environment" sed -i s/^GRUB_CMDLINE_LINUX.*/GRUB_CMDLINE_LINUX_DEFAULT"quiet splash systemd.unified_cgroup_hierarchy0" / /etc/default/grub update-grub reboot 下载oracle 7 Linux 容器测试 l…...

JavaEE初阶复习(JVM篇)

JVM Java虚拟机 jdk java开发工具包 jre java运行时环境 jvm java虚拟机(解释执行 java 字节码) java作为一个半解释,半编译的语言,可以做到跨平台. java 通过javac把.java文件>.class文件(字节码文件) 字节码文件, 包含的就是java字节码, jvm把字节码进行翻译转化为…...

MINIQMT学习课程Day9

获取qmt账号的持仓情况后&#xff0c;我们进入下一步&#xff0c;如何获得当前账号的委托状况 还是之前的步骤&#xff0c;打开qmt&#xff0c;选择独立交易&#xff0c; 之后使用pycharm&#xff0c;编写py文件 导入包&#xff1a; from xtquant import xtdata from xtqua…...

动态规划似包非包系列一>组合总和IIV

目录 题目分析&#xff1a;状态表示&#xff1a;状态转移方程&#xff1a;初始化填表顺序返回值&#xff1a;代码呈现&#xff1a; 题目分析&#xff1a; 状态表示&#xff1a; 状态转移方程&#xff1a; 初始化填表顺序返回值&#xff1a; 代码呈现&#xff1a; class Soluti…...

Java 二叉树非递归遍历核心实现

非递归遍历的核心是用栈模拟递归的调用过程&#xff0c;通过手动维护栈来替代系统栈&#xff0c;实现前序、中序和后序遍历。以下是三种遍历的代码实现与关键逻辑分析&#xff1a; 一、二叉树遍历 1.1、前序遍历&#xff08;根 → 左 → 右&#xff09; 核心逻辑&#xff1a;…...

JavaScript性能优化实践:从微观加速到系统级策略

JavaScript性能优化实践:从微观加速到系统级策略 引言:性能优化的"时空折叠"思维 在JavaScript的世界里,性能优化如同在时间与空间的维度中折叠代码。本文将通过"时空折叠"的隐喻,从代码执行效率(时间维度)和内存占用(空间维度)两大核心,结合现代…...

《P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题》

题目描述 输入两个正整数 x0​,y0​&#xff0c;求出满足下列条件的 P,Q 的个数&#xff1a; P,Q 是正整数。 要求 P,Q 以 x0​ 为最大公约数&#xff0c;以 y0​ 为最小公倍数。 试求&#xff1a;满足条件的所有可能的 P,Q 的个数。 输入格式 一行两个正整数 x0​,y0​。…...

【力扣hot100题】(052)课程表

什么人一学期要上2000节课啊jpg 看了非常久都没思路&#xff0c;主要是数据结构还没复习到图论&#xff0c;根本没思路怎么储存一个图…… 唯一记得的就是两种存储方法&#xff0c;一种是二维数组法&#xff0c;记录每一条边的有无&#xff0c;一种是只记录有的边&#xff0c…...

SpringBoot配置文件多环境开发

目录 一、设置临时属性的几种方法 1.启动jar包时&#xff0c;设置临时属性 ​2.idea配置临时属性 3.启动类中创建数组指定临时属性 二、多环境开发 1.包含模式 2.分组模式 三、配置文件的优先级 1.bootstrap 文件优先&#xff1a; 2.特定配置文件优先 3.文件夹位置优…...

RSA和ECC在密钥长度相同的情况下哪个更安全?

​现在常见的SSL证书&#xff0c;如&#xff1a;iTrustSSL都支持RSA和ECC的加密算法&#xff0c;正常情况下RAS和ECC算法该如何选择呢&#xff1f;实际上在密钥长度相同的情况下&#xff0c;ECC&#xff08;椭圆曲线密码学&#xff09;通常比RSA&#xff08;Rivest-Shamir-Adle…...

Dive into Deep Learning - 2.4. Calculus (微积分)

Dive into Deep Learning - 2.4. Calculus {微积分} 1. Derivatives and Differentiation (导数和微分)1.1. Visualization Utilities 2. Chain Rule (链式法则)3. DiscussionReferences 2.4. Calculus https://d2l.ai/chapter_preliminaries/calculus.html For a long time, …...

【备考高项】附录:合同法全文(428条全)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 第一章 一般规定第二章 合同的订立第三章 合同的效力第四章 合同的履行第五章 合同的变更和转让第六章 合同的权利义务终止第七章 违约责任第八章 其他规定第九章 买卖合同第十章 供用电、水、气、热力合同第十…...

Ubuntu安装Podman教程

1、先修改apt源为阿里源加速 备份原文件&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 修改源配置&#xff1a; vim sources.list删除里面全部内容后&#xff0c;粘贴阿里源&#xff1a; deb http://mirrors.aliyun.com/ubuntu/ focal main re…...

9.进程信号

信号量 信号量是什么&#xff1f; ​ 本质是一个计数器&#xff0c;通常用来表示公共资源中&#xff0c;资源数量多少的问题。 ​ 公共资源&#xff1a;可以被多个进程同时访问的资源。 访问没有保护的公共资源会导致数据不一致问题 什么是数据不一致问题 ​ 由于公共资源…...

python爬虫:小程序逆向(需要的工具前期准备)

前置知识点 1. wxapkg文件 如何查看小程序包文件 打开wechat的设置&#xff1a; .wxapkg概述 .wxapkg是小程序的包文件格式&#xff0c;且其具有独特的结构和加密方式。它不仅包含了小程序的源代码&#xff0c;还包括了图像和其他资源文件&#xff0c;这些内容在普通的文件…...

PGSQL 对象创建函数生成工具

文章目录 代码结果 代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>PGSQL 函数生成器</tit…...

查询当前用户的购物车和清空购物车

业务需求&#xff1a; 在小程序用户端购物车页面能查到当前用户的所有菜品或者套餐 代码实现 controller层 GetMapping("/list")public Result<List<ShoppingCart>> list(){List<ShoppingCart> list shoppingCartService.shopShoppingCart();r…...

八、重学C++—动态多态(运行期)

上一章节&#xff1a; 七、重学C—静态多态&#xff08;编译期&#xff09;-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146999362?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp/dynamicPolymorphic.cpp CuiQingCheng/cppstudy - 码云 - 开源中…...

react redux的学习,多个reducer

redux系列文章目录 第一章 简单学习redux,单个reducer 前言 前面我们学习到的是单reducer的使用&#xff1b;要知道redux是个很强大的状态存储库&#xff0c;可以支持多个reducer的使用。 combineReducers ‌combineReducers‌是Redux中的一个辅助函数&#xff0c;主要用于…...

饮食助力进行性核上性麻痹患者,提升生活质量

进行性核上性麻痹是一种少见的神经系统变性疾病&#xff0c;患者会出现姿势不稳、眼球运动障碍等症状。合理的饮食对于维持患者身体机能、延缓病情发展有重要意义。 高蛋白质食物是饮食结构的重要部分。像瘦肉、去皮禽肉、鱼类、豆类及其制品&#xff0c;还有低脂奶制品等&…...

leetcode117 填充每个节点的下一个右侧节点指针2

LeetCode 116 和 117 都是关于填充二叉树节点的 next 指针的问题&#xff0c;但它们的区别在于 树的类型 不同&#xff0c;117与 116 题类似&#xff0c;但给定的树是 普通二叉树&#xff08;不一定完全填充&#xff09;&#xff0c;即某些节点可能缺少左或右子节点。 树的结构…...