我正在尝试使用名为 ml4floods 的 python 工具将 google Earth 引擎数据导出到我的 google 云存储桶。它在后端使用 gcsfs 来完成此任务。
但是当我像这样设置所有必要的环境变量时
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/home/omer/sat/application_default_credentials.json"
os.environ["GS_USER_PROJECT"] = "Floods-analysis"
bucket_name = "floodanalysis"
并运行我的代码,我得到以下错误回溯:
25 filename = f"{path_to_export}albania_ts_{date}"
26 desc=f"albania_ts_{date}"
---> 27 task = ee_download.mayberun(
28 filename,
29 desc,
30 lambda: img_export,
31 export_task_fun_img,
32 overwrite=False,
33 dry_run=False,
34 bucket_name=bucket_name,
35 verbose=2,
36 )
37 if task is not None:
38 tasks.append(task)
File ~/miniconda3/envs/ml4gdal/lib/python3.11/site-packages/ml4floods/data/ee_download.py:299, in mayberun(filename, desc, function, export_task, overwrite, dry_run, verbose, bucket_name)
296 if bucket_name is not None:
297 fs = get_filesystem("gs://")
--> 299 files_in_bucket = fs.glob(f'gs://{bucket_name}/{filename}*')
300 if len(files_in_bucket) > 0:
301 if overwrite:
...
948 "should be str, int or float, got {!r} "
949 "of type {}".format(v, cls)
950 )
TypeError: Invalid variable type: value should be str, int or float, got None of type <class 'NoneType'>
我检查了所有的系统变量、项目信息和其他东西,但它们都没有问题。
我的凭证 JSON 文件是这样的:
"client_id": "<removed this>.apps.googleusercontent.com",
"client_secret": "<removed this>",
"quota_project_id": "floods-analysis",
"refresh_token": "<removed-this>",
"type": "authorized_user"
}
正如 John Hanley 评论的那样,我在环境变量中使用 OAuth 客户端凭据而不是服务帐户凭据
"GOOGLE_APPLICATION_CREDENTIALS"
。
这是唯一的问题,一旦我解决了它,一切都变得好起来。