You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PyInstaller打包生成.exe文件时提示JSON文件未找到的问题求助

解决PyInstaller打包时找不到JSON文件的问题

我来帮你搞定这个打包报错的问题——你遇到的script 'C:\Users\username\cs-new-success-c50837cb5b30.json;.' not found错误,根源是PyInstaller的--add-data参数格式解析失败,和你代码里的路径处理逻辑关系不大,咱们一步步来修复:

1. 修正打包命令的--add-data参数

在Windows系统下,PyInstaller的--add-data参数需要用;分隔「源文件路径」和「目标目录」,但你原来的命令里,PyInstaller错误地把整个C:\Users\username\cs-new-success-c50837cb5b30.json;./当成了一个要查找的脚本文件。

你可以把命令改成下面两种写法之一:

写法一:使用相对路径(推荐,因为文件和脚本在同一目录)

C:\Users\username>pyinstaller --onefile --icon=xross.ico --noconsole --hidden-import babel.numbers --add-data "cs-new-success-c50837cb5b30.json;." xrosscustomer01.py

写法二:使用绝对路径

C:\Users\username>pyinstaller --onefile --icon=xross.ico --noconsole --hidden-import babel.numbers --add-data "C:/Users/username/cs-new-success-c50837cb5b30.json;." xrosscustomer01.py

注意:把Windows的反斜杠\换成正斜杠/,可以避免PyInstaller解析路径时出现转义问题;目标目录用.表示程序运行时的当前工作目录(打包后会对应sys._MEIPASS临时目录)。

2. 保留你的resource_path路径处理函数

你之前写的resource_path函数是正确的,它能自动适配开发环境和打包后的环境,一定要保留这个逻辑:

import sys
import os

def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)

if __name__ == "__main__":
    import gspread
    from oauth2client.service_account import ServiceAccountCredentials
    
    scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        resource_path('cs-new-success-c50837cb5b30.json'), scope)
    gc = gspread.authorize(credentials)
    # 后续业务逻辑...

3. 备选方案:直接修改.spec文件打包

如果修改命令后还是不行,可以手动编辑PyInstaller生成的xrosscustomer01.spec文件,确保datas列表正确添加了你的JSON文件:
打开.spec文件,找到a = Analysis(...)部分,修改datas参数:

a = Analysis(
    ['xrosscustomer01.py'],
    pathex=['C:\\Users\\username'],
    binaries=[],
    datas=[('C:\\Users\\username\\cs-new-success-c50837cb5b30.json', '.')],
    # 其他参数保持不变...
)

然后用这个.spec文件重新打包:

C:\Users\username>pyinstaller xrosscustomer01.spec

额外检查点

  • 确认JSON文件名完全正确(你的文件名很长,容易出现拼写错误,比如多了/少了字符)
  • 确保JSON文件确实在C:\Users\username目录下,没有被误放到子文件夹里

这样操作后,打包应该就能正常完成,而且运行打包后的程序时也能正确找到JSON文件了。

内容的提问来源于stack exchange,提问作者Aspi.Lon

火山引擎 最新活动