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

问题描述 投票:0回答:7

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

我在 Mac 上运行 Jupyter Notebook 时没有遇到过这个问题,但由于我想在我的模型中使用 google 的 GPU,所以我开始使用 google colab。因为 Kaggle API 期望用户名和 api-key 位于 .kaggle 目录中的 kaggle.json 文件中,所以我首先创建了目录 .kaggle,然后创建了文件 kaggle.json,在其中写入了我的用户名和 api- key(下面的示例不显示我的用户名和 api-key)。然后,我尝试配置 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

但是,当运行最后一个命令时,我收到错误:

IOError: Could not find kaggle.json. Make sure it's located in /root/.kaggle. Or use the environment method.

我的目标是使用以下命令从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()

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

python google-colaboratory kaggle
7个回答
44
投票

根据 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

然后一些 api 调用,比如

!kaggle datasets download -d datamunge/sign-language-mnist

18
投票

您可以从 Kaggle 门户本身找到需要放置的 JSON 文件。只需登录 Kaggle,进入您的帐户页面,然后单击“创建新 API 令牌”,它将为您提供一个需要放置的 JSON 文件。


9
投票

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

尝试:

!mv .kaggle /root/

然后再次运行您的代码。


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)  


3
投票

在单元格中运行此代码以配置环境

import os
os.environ["KAGGLE_CONFIG_DIR"] = "/path_to_your_kaggle.json_file"

他们已经编写了他们的 GitHub 存储库,您可以配置 kaggle.json 的环境,错误也出现在 colab 或 windows 中:

您可以定义 shell 环境变量

KAGGLE_CONFIG_DIR
将此位置更改为
$KAGGLE_CONFIG_DIR/kaggle.json
(在 Windows 上为
%KAGGLE_CONFIG_DIR%\kaggle.json
)。

-- 参考这个


0
投票

如果您是 Windows 用户,请将 kaggle.json 移动到 .kaggle 文件夹中,这样您就可以在系统根目录(位于您的用户名文件夹中)中找到它。


0
投票

此链接有助于将 Kaggle 数据集上传到协作中: https://www.kaggle.com/discussions/general/74235

您可以从https://www.kaggle.com/settings下载kaggle.json文件,查看API

& 对于数据集下载命令 - 继续您想要下载的相应数据集,单击 3 个点(查看附图)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.