Pyinstaller打包EXE后Google API build()失败,IDE运行正常
问题解决方案
一、IDE中 invalid_scope 错误处理
首先明确:访问公开播放列表不需要OAuth授权,只需要使用API Key即可。你当前的错误是误用了OAuth凭证调用无需授权的接口,且OAuth的scope配置不正确导致的。
处理步骤:
- 替换凭证类型:删除代码中OAuth认证相关逻辑(比如
OAuth2Credentials相关代码),改用API Key认证。 - 正确初始化YouTube服务,示例代码:
from googleapiclient.discovery import build API_KEY = "你的Google Cloud API密钥" youtube = build('youtube', 'v3', developerKey=API_KEY) # 调用公开播放列表接口示例 request = youtube.playlists().list( part="snippet,contentDetails", id="目标公开播放列表ID", maxResults=25 ) response = request.execute() - 额外检查:确保你的API Key在Google Cloud控制台中已经启用了YouTube Data API v3权限。
二、Pyinstaller打包后 build() 阶段崩溃(mTLS连接失败)
Pyinstaller打包时可能未正确包含Google API客户端所需的TLS证书或依赖文件,导致无法建立mTLS连接。可尝试以下方案:
方案1:手动指定证书路径
Google API客户端依赖系统证书,打包后可能无法自动找到,手动指定证书路径:
- 找到你Python环境中的证书文件,通常路径为:
Lib\site-packages\certifi\cacert.pem - 在代码中添加环境变量配置,指向打包后的证书文件(假设证书和exe同目录):
import os import certifi cert_path = os.path.join(os.path.dirname(__file__), 'cacert.pem') os.environ['REQUESTS_CA_BUNDLE'] = cert_path os.environ['SSL_CERT_FILE'] = cert_path - 打包时把证书文件包含到输出目录:
pyinstaller --add-data "你的证书路径\cacert.pem;." 你的脚本文件名.py
方案2:强制包含缺失的依赖
Google API客户端的部分动态导入可能被Pyinstaller忽略,用hiddenimports参数强制包含:
pyinstaller --hidden-import googleapiclient --hidden-import googleapiclient.discovery --hidden-import googleapiclient.http 你的脚本文件名.py
方案3:临时禁用mTLS(仅测试用)
如果上述方法无效,可尝试禁用Google API客户端的mTLS要求,构建服务时添加参数:
youtube = build('youtube', 'v3', developerKey=API_KEY, static_discovery=False)
注意:禁用mTLS会降低安全性,仅作为临时测试方案,生产环境不建议使用。
内容的提问来源于stack exchange,提问作者user15846642
相关产品推荐
相关产品推荐

