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

py文件打包为exe可执行文件,涉及mysql连接失败以及找不到json文件

py文件打包为exe可执行文件,涉及mysql连接失败以及找不到json文件


项目场景:使用flask框架封装算法接口,并使用pyinstaller打包为exe文件。使用pyinstaller打包多文件的场景,需要自己手动去.spec文件中添加其他文件,推荐使用auto-py-to-exe,有可视化界面,比较方便,直接添加文件就行。


问题描述

问题1、算法本地运行,使用postman传参,mysql能够连接数据库成功。当打包成exe文件后,exe文件运行失败。
问题2、json文件已经包含在打包文件中,还是提示找不到。
错误显示
1、mysql连接失败,提示mysql.connector出现问题。
2、找不到json对应的文件路径


原因分析:

问题1、远程连接mysql库时,使用mysql-connector-python库,这个库可能与pyinstaller不兼容,导致连接频繁失败,找了一些相关的文章没有涉及,记录一下。
问题2、因为程序在运行时未能正确定位文件路径 ,即使文件被打包到了输出目录中,程序运行时的工作目录(os.getcwd())可能与你预期的不同。
例如:
在开发环境中,工作目录通常是脚本所在的目录。
在打包后的程序中,工作目录可能是用户启动程序的目录(如桌面或其他位置),而不是可执行文件所在的目录。


解决方案:

问题1解决方法:
使用纯 Python 实现的驱动程序:PyMySQL

pip install PyMySQL

然后在python中导入pymysql

import pymysql

这样可以避免 mysql.connector 中的复杂依赖问题。

问题2解决方法:
使用 sys._MEIPASSos.path.dirname(sys.executable) 获取程序的真实路径。

import os
import sysdef get_resource_path(relative_path):"""获取资源文件的绝对路径"""if hasattr(sys, '_MEIPASS'):# PyInstaller 生成的临时目录base_path = sys._MEIPASSelse:# 开发环境下的路径base_path = os.path.dirname(os.path.abspath(__file__))return os.path.join(base_path, relative_path)# 示例:读取 JSON 文件
def read_from_json(path):full_path = get_resource_path(path)if not os.path.exists(full_path):raise FileNotFoundError(f"File not found: {full_path}")with open(full_path, 'r', encoding='utf-8') as file:return file.read()

在代码中调用 read_from_json("all_data_update.json") 时,get_resource_path 会自动处理路径问题。

关于auto-py-to-exe使用


安装和运行:

pip install auto-py-to-exe
auto-py-to-exe

可视化界面:
可视化UI界面


http://www.mrgr.cn/news/97419.html

相关文章:

  • 时间梯度匹配损失 TGMLoss
  • 12.青龙面板自动化我的生活
  • 【MySQL】常用SQL--持续更新ing
  • 08RK3568 gpio模拟i2c 配置hym8563 RTC时钟
  • C++设计模式总结-汇总了全部23种设计模式的详细说明
  • 大语言模型在端到端智驾中的应用
  • 机器视觉3D中激光偏镜的优点
  • 专栏:区块链入门到放弃查看目录
  • Java面试33-fail-safe机制与fail-fast机制分别有什么作用
  • Linux:页表详解(虚拟地址到物理地址转换过程)
  • Dart 语法
  • 字符串-JS
  • 项目总结之常问的一些问题
  • uniapp如何接入星火大模型
  • Java面试34-Kafka的零拷贝原理
  • 国产芯片解析:龙讯USB Type-C/DP Transmitter多场景覆盖,定义高速互联新标杆
  • Java面试32-对Spring Cloud的理解
  • LeetCode 热题 100 堆
  • 从零搭建微服务项目Pro(第7-1章——分布式雪花算法)
  • 1. Qt信号与槽