相对路径不适用于 credentials.Certificate()

relative path not work with credentials.Certificate()

我在 python 项目中使用 Firebase。要初始化 credential.Certificate() 我想使用这样的相对路径:

cred_path = 'jsonfile.json'
cred_path = os.path.join(os.path.dirname(__file__),cred_path)

输出是

C:\Users\testuser\Desktop\Rewrite\jsonfile.json

如果我将路径传递给 firebase 方法并使用 pyinstaller 将其转换为 .exe,我会收到错误消息。

 cred = credentials.Certificate(m)
firebase_admin.initialize_app(cred, {
    'databaseURL' : 'databaseurl.com'
})

Traceback (most recent call last): File "rewriteword.py", line 24, in File "firebase_admin\credentials.py", line 82, in init FileNotFoundError: [Errno 2] No such file or directory: 'jsonfile.json' [18292] Failed to execute script testscript

如果我使用绝对路径,它可以完美无误地工作。为什么会这样?

已修复。我必须将 .json 数据添加到 pyinstaller.

cred_path = 'jsonfile.json'
bundle_dir = getattr(sys, '_MEIPASS', path.abspath(path.dirname(__file__)))
path_to_dat = path.abspath(path.join(bundle_dir, cred_path))
pyinstaller --onefile --add-data "jsonfile.json;." rewriteword.py