当前位置: 首页 > 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 sys

def get_resource_path(relative_path):
    """获取资源文件的绝对路径"""
    if hasattr(sys, '_MEIPASS'):
        # PyInstaller 生成的临时目录
        base_path = sys._MEIPASS
    else:
        # 开发环境下的路径
        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://YaUT1Q0H.kbdjn.cn
http://akng4JbB.kbdjn.cn
http://BSf2IkMp.kbdjn.cn
http://VDHSDtWO.kbdjn.cn
http://XsowIPp0.kbdjn.cn
http://2K7LAdxR.kbdjn.cn
http://5qxhNUUG.kbdjn.cn
http://hHAdkre4.kbdjn.cn
http://63LRbO7h.kbdjn.cn
http://AKRKTicN.kbdjn.cn
http://s0I4D9RT.kbdjn.cn
http://3J1LhYtY.kbdjn.cn
http://HOAskimA.kbdjn.cn
http://ha7UkhAU.kbdjn.cn
http://ZPmqummU.kbdjn.cn
http://ooALJtxj.kbdjn.cn
http://P5bqGnp5.kbdjn.cn
http://RwbQsg4q.kbdjn.cn
http://vJUdawlB.kbdjn.cn
http://vXiSGzbs.kbdjn.cn
http://Yx8FGbye.kbdjn.cn
http://rqRnM635.kbdjn.cn
http://KUHIEPpU.kbdjn.cn
http://BzVdUQzb.kbdjn.cn
http://j5cyQlUc.kbdjn.cn
http://C0nsLWB4.kbdjn.cn
http://IeGmVuVZ.kbdjn.cn
http://pdcHgNbM.kbdjn.cn
http://koAUHvjS.kbdjn.cn
http://CjVYrO34.kbdjn.cn
http://www.dtcms.com/a/116232.html

相关文章:

  • 使用PyQt5绘制水波浪形的柱状显示流量—学习QTimer+QPainterPath
  • Logo语言的区块链
  • Compose组件转换XML布局1.0
  • 基于SpringBoot的医院信息管理系统(源码+数据库)
  • 基于Python的人脸识别校园考勤系统
  • 初见TypeScript
  • 微信小程序—路由
  • Qt 入门 0 之 QtCreator 简介
  • 【微服务架构】SpringCloud Alibaba(八):Nacos 2.1.0 作为配置中心(Nacos的使用)
  • SpringAI+MCP协议 实战
  • 第六章:框架实战:构建集成向量与图谱的 RAG 应用
  • Qt的window注册表读写以及删除
  • VBA数据库解决方案第二十讲:SQL在VBA中几种常见的表达方式
  • 11.使用依赖注入容器实现松耦合
  • Gerapy二次开发:git项目实现变更拉取与上传
  • 蓝桥与力扣刷题(74 搜索二维矩阵)
  • Docker基础1
  • Jetpack Compose 生产级语言切换架构:ViewModel + Flow 的终极实现
  • 今是科技发布全新测序仪G-seq1M:以效率与精准引领基因测序新标杆
  • java后端开发day34--脑子空空如何无痛想起所有知识点--概念拟人化
  • 4月5日作业
  • 架构师面试(二十七):单链表
  • 【嵌入式学习3】UDP发送端、接收端
  • 数据库系统-数据库控制
  • 大模型快速 ASGI 服务器uvicorn
  • 石头剪刀布游戏
  • linux sudo不需要输入密码
  • 通过 itms-services 协议下载安装 IOS 应用
  • Shiro学习(六):Shiro整合CAS实现单点登录
  • JSON 是什么?通俗详解