Firebase初始化报错找不到serviceAccountKey.json文件如何解决
问题场景
运行如下Firebase Admin SDK初始化代码:
import firebase_admin from firebase_admin import credentials from firebase_admin import firestore cred = credentials.Certificate("serviceAccountKey.json") firebase_admin.initialize_app(cred)
运行后抛出如下报错:
File "C:\Users\olive\PycharmProjects\pythonProject\main.py", line 6, in <module> cred = credentials.Certificate("serviceAccountKey.json") File "C:\Users\olive\PycharmProjects\pythonProject\venv\lib\site-packages\firebase_admin\credentials.py", line 83, in __init__ with open(cert) as json_file: FileNotFoundError: [Errno 2] No such file or directory: 'serviceAccountKey.json'
serviceAccountKey.json文件存放位置:
报错原因
代码中传入的是相对路径serviceAccountKey.json,Python执行open()操作时,会从程序运行时的工作目录下查找对应文件,不会自动遍历所有子文件夹。当前工作目录下不存在该文件,就会触发文件找不到的错误。
从给出的项目结构判断,大概率是密钥文件没有放在执行脚本main.py的同级根目录,或是PyCharm运行时配置的工作目录和存放密钥的目录不匹配。
修复方法
- 方法1:使用绝对路径直接指定密钥位置
右键点击serviceAccountKey.json复制其完整路径,替换代码中的相对路径即可。Windows路径注意不要直接使用单反斜杠,避免触发转义问题,示例:# 用正斜杠写路径 cred = credentials.Certificate("C:/Users/olive/PycharmProjects/pythonProject/serviceAccountKey.json") - 方法2:调整文件位置
把serviceAccountKey.json移动到和main.py同级的项目根目录下,保持原有代码的相对路径写法不变,即可正常读取。 - 方法3:动态拼接路径(兼容性最优)
借助os模块基于当前运行的py文件位置动态计算密钥路径,不会受工作目录变动、项目迁移影响,示例代码:import os import firebase_admin from firebase_admin import credentials from firebase_admin import firestore # 获取当前执行脚本所在的文件夹路径 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接得到密钥文件的完整路径 key_path = os.path.join(script_dir, "serviceAccountKey.json") cred = credentials.Certificate(key_path) firebase_admin.initialize_app(cred)
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

