在 google colab 中找不到 kaggle.json 文件

Die*_*nig 21 python kaggle google-colaboratory

我正在尝试将 kaggle imagenet 对象本地化挑战数据下载到 google colab 中,以便我可以使用它来训练我的模型。Kaggle 使用 API 来轻松快速地访问他们的数据集。( https://github.com/Kaggle/kaggle-api ) 但是,在 google colab 中调用命令“kaggle Competitions download -c imagenet-object-localization-challenge”时,找不到 kaggle.json 文件包含我的用户名和 api 密钥。

运行 jupyter notebook 时,我的 Mac 上没有出现此问题,但由于我想将 google 的 gpu 用于我的模型,因此我开始使用 google colab。因为kaggle API 期望用户名和api-key 位于位于.kaggle 目录的kaggle.json 文件中,所以我首先创建了目录.kaggle,然后创建了文件kaggle.json,我在其中写入了我的用户名和api-密钥(下面的示例不显示我的用户名和 api 密钥)。然后我尝试配置我的 json 文件的路径,以便在调用 kaggle 下载命令时使用 kaggle。

!pip install kaggle

!mkdir .kaggle
!touch .kaggle/kaggle.json

api_token = {"username":"username","key":"api-key"}

import json
import zipfile
import os
with open('/content/.kaggle/kaggle.json', 'w') as file:
    json.dump(api_token, file)

!chmod 600 /content/.kaggle/kaggle.json
!kaggle config path -p /content
Run Code Online (Sandbox Code Playgroud)

但是,在运行最后一个命令时,出现错误:

IOError: Could not find kaggle.json. Make sure it's located in /root/.kaggle. Or use the environment method.
Run Code Online (Sandbox Code Playgroud)

我的目标是使用以下命令从 kaggle 获取数据集:

!kaggle competitions download -c imagenet-object-localization-challenge
os.chdir('/content/competitions/imagenet-object-localization-challenge')
for file in os.listdir():
    zip_ref = zipfile.ZipFile(file, 'r')
    zip_ref.extractall()
    zip_ref.close()
Run Code Online (Sandbox Code Playgroud)

我不明白为什么 kaggle API 找不到我的 json 文件。如何在 google colab 中使用 API?

Ego*_*eev 17

根据kaggle api 文档,凭据 json 正在寻找的位置是~/.kaggle/kaggle.json因为 google colab 环境是基于 Linux 的。在您的代码段中,您尝试配置path参数,但它不用于查找凭证 json:

- 路径:下载文件的文件夹,默认为当前工作目录

因此,google colab 环境的完整工作片段将是:

!mkdir ~/.kaggle
!touch ~/.kaggle/kaggle.json

api_token = {"username":"username","key":"api-key"}

import json

with open('/root/.kaggle/kaggle.json', 'w') as file:
    json.dump(api_token, file)

!chmod 600 ~/.kaggle/kaggle.json
Run Code Online (Sandbox Code Playgroud)

然后一些api调用像

!kaggle datasets download -d datamunge/sign-language-mnist
Run Code Online (Sandbox Code Playgroud)

  • 这是迄今为止最好的答案,应该是公认的答案! (2认同)

Kor*_*ich 7

正如错误所说,您需要将 kaggle.json 放在正确的位置。

尝试:

!mv .kaggle /root/
Run Code Online (Sandbox Code Playgroud)

然后再次运行您的代码。


sto*_*azy 7

您可以在 Kaggle 门户本身中找到您需要放置的 JSON 文件。只需单击“创建新 API 令牌”,它就会为您提供一个需要放置的 JSON 文件。

在此处输入图片说明


fds*_*sig 5

我自己的方法,如果你想最小化“!” 除了上面 Egor B Eremeev 的回答。

根据您的用例,这可能是有益的,并且从长远来看,如果您正在编写脚本,则会导致更清晰的代码。

import json 
import os
from pathlib import Path

# your api key
api_key = {
'username':"username" ,
'key':"some_api_key"}

# uses pathlib Path
kaggle_path = Path('/root/.kaggle')
os.makedirs(kaggle_path, exist_ok=True)

# opens file and dumps python dict to json object 
with open (kaggle_path/'kaggle.json', 'w') as handl:
    json.dump(api_key,handl)

os.chmod(kaggle_path/'kaggle.json', 600)  

Run Code Online (Sandbox Code Playgroud)