在 Colab 上导入 Kaggle 数据集时出错

Posted

技术标签:

【中文标题】在 Colab 上导入 Kaggle 数据集时出错【英文标题】:Error while importing Kaggle dataset on Colab 【发布时间】:2019-01-28 05:23:48 【问题描述】:

执行以下行时,

!pip install kaggle
!kaggle competitions download -c dogs-vs-cats -p /content/

我收到以下错误消息,

Traceback (most recent call last):
File "/usr/local/bin/kaggle", line 7, in <module>
from kaggle.cli import main
File "/usr/local/lib/python3.6/dist-packages/kaggle/__init__.py", line 23, in <module>
api.authenticate()
File "/usr/local/lib/python3.6/dist-packages/kaggle/api/kaggle_api_extended.py", line 109, in authenticate
self._load_config(config_data)
File "/usr/local/lib/python3.6/dist-packages/kaggle/api/kaggle_api_extended.py", line 151, in _load_config
raise ValueError('Error: Missing %s in configuration.' % item)
ValueError: Error: Missing username in configuration.

我不知道刚刚发生了什么...之前同样的行运行良好。第一次发现这个问题。

【问题讨论】:

【参考方案1】:

确保您首先安装了 kaggle api:pip install kaggle。 然后从https://www.kaggle.com/kaggle_user_name/account 获取您的 API 令牌:

只需下载您的比赛数据(在这里dogs-vs-cats-redux-kernels-edition

! touch /root/.kaggle/kaggle.json
! chmod 600 /root/.kaggle/kaggle.json
! echo '"username":"kaggle_user_name","key":"0000000000000000000000000000000000"' >> /root/.kaggle/kaggle.json
! kaggle competitions download -c "dogs-vs-cats-redux-kernels-edition"

【讨论】:

【参考方案2】:

five简单步骤:

第 1 步: 导入驱动

from google.colab import drive
drive.mount('/content/gdrive')

https://accounts.google.com/o/oauth2/auth?client_id=xxx获取授权码并在Enter your authorization code:输入授权码

第 2 步: 下载本地系统中的kaggle.json文件

kaggle.com -> 我的帐户 -> 创建

第 3 步: 上传kaggle.json 文件。 点击Colab左上角&gt;获取

panel -> 文件 -> 上传

第 4 步: 将文件复制到 Colab

!cp /your path/kaggle.json ~/.kaggle/kaggle.json

第 5 步: 修复警告

此系统上的其他用户可以读取您的 Kaggle API 密钥!

!chmod 600 /root/.kaggle/kaggle.json

测试

!pip install kaggle
import kaggle
!kaggle competitions list --csv

结果

参考,截止日期,类别,奖励,团队计数,用户已进入 数字识别器,2030-01-01 00:00:00,入门,知识,2867,假 泰坦尼克号,2030-01-01 00:00:00,入门,知识,11221,假 房价高级回归技术,2030-01-01 00:00:00,入门,知识,4353,真 imagenet-object-localization-challenge,2029-12-31 07:00:00,研究,知识,40,假 竞争数据科学预测未来销售,2019 年 12 月 31 日 23:59:00,操场,荣誉,2780,假 两西格玛财经新闻,2019-07-15 23:59:00,精选,“$100,000”,2927,假 空中仙人掌识别,2019-07-08 23:59:00,游乐场,知识,377,假 jigsaw-unintended-bias-in-toxicity-classification,2019-06-26 23:59:00,Featured,"$65,000",982,False inaturalist-2019-fgvc6,2019-06-10 23:59:00,研究,荣誉,75,假 freesound-audio-tagging-2019,2019-06-10 11:59:00,Research,"$5,000",250,False

【讨论】:

【参考方案3】:

这个简单的事情在谷歌可乐上为我做了。

!echo '"username":"USERNAME","key":"KEY"' > ~/.kaggle/kaggle.json
!kaggle datasets download -d mmoreaux/environmental-sound-classification-50

--

编辑,可能已更改为:

!echo '"username":"USERNAME","key":"KEY"' > /root/.kaggle/kaggle.json
!kaggle datasets download -d mmoreaux/environmental-sound-classification-50

【讨论】:

感谢我,它只有在我选择以下目录时才有效。 !echo '"username":"USERNAME","key":"KEY"' > /root/.kaggle/kaggle.json【参考方案4】:

同时检查您的kaggle.json 文件的权限。我得到了同样的错误,因为在运行不同的 kaggle 命令后,我得到了这个警告:

警告:您的 Kaggle API 密钥可以被该系统上的其他用户读取!要解决此问题,您可以运行 'chmod 600 /...etc/kaggle.json'

我运行了他们的建议,并得到了与您相同的错误,直到我将权限更改回他们以前的权限。

这是我自己的机器(其他用户是我信任的导师),所以我使用了 chown 666 /.../kaggle.json 并解决了这个问题,但要小心,只根据您各自的设置授予权限。

【讨论】:

【参考方案5】:

最初将 .json 文件复制到 colab 虚拟机时遇到问题。最终对我来说,以下工作: 通过 google colaboratory,首先你需要安装 kaggle API:

!pip install kaggle

更多信息和说明在这里https://github.com/Kaggle/kaggle-api。 接下来,该链接将指示您使用您的 kaggle 用户在 kaggle.com -> 我的帐户 -> 创建新的 API 令牌 上下载的文件激活 API。这个文件是kaggle.json

接下来,为了将这个 kaggle.json 文件上传到 colab 虚拟机进行激活,您可以先将其上传到您的 google 驱动器(只需将其拖到驱动器)。接下来在colab中输入以下命令导入你的驱动:

from google.colab import drive
drive.mount('/content/gdrive')

授权完成后,您可以将文件从驱动器复制到colab:

!cp /content/gdrive/My\ Drive/kaggle.json ~/.kaggle/kaggle.json

最后,希望您能够运行命令:

!kaggle competitions download -c <competition-name>

我希望这会有所帮助!

【讨论】:

【参考方案6】:

它也突然停止在这里工作。显然,kaggle api 没有在正确的位置搜索 kaggle.json 文件。 由于我在 colab 笔记本中使用 kaggle api,因此我正在像这样导入 kaggle.json:

from googleapiclient.discovery import build
import io, os
from googleapiclient.http import MediaIoBaseDownload
from google.colab import auth

auth.authenticate_user()

drive_service = build('drive', 'v3')
results = drive_service.files().list(
        q="name = 'kaggle.json'", fields="files(id)").execute()
kaggle_api_key = results.get('files', [])

filename = "/content/.kaggle/kaggle.json"
os.makedirs(os.path.dirname(filename), exist_ok=True)

request = drive_service.files().get_media(fileId=kaggle_api_key[0]['id'])
fh = io.FileIO(filename, 'wb')
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
    status, done = downloader.next_chunk()
    print("Download %d%%." % int(status.progress() * 100))
os.chmod(filename, 600)

它工作得很好。但是现在,kaggle api 在这个位置搜索 kaggle.json:

~/.kaggle/kaggle.json

所以,我只需将下载的文件移动/复制到正确的位置:

!mkdir ~/.kaggle
!cp /content/.kaggle/kaggle.json ~/.kaggle/kaggle.json

它又开始工作了。

【讨论】:

是的,由于历史原因,我们一直设置$HOME=/content,但最近取消了该设置。如果你只是在上面的 sn-p 中使用filename = os.path.expanduser("~/.kaggle/kaggle.json"),你应该不需要做额外的复制(因为我猜你只需要在一个地方的文件)。【参考方案7】:

看起来 Colab 中的主目录最近从 /content 更改为 /root。在路径中使用 ~ 来引用 HOME 而不是硬编码 /content 将修复。

我已更新 this answer 中的分步工作流程以反映更改。给您添麻烦了!

【讨论】:

非常感谢。我会试试这个。谢谢你的好意。

以上是关于在 Colab 上导入 Kaggle 数据集时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 google colab 上运行但在 kaggle 上运行的简单代码

将kaggle数据引入google colab

Colab 的生产力:直接从网络(例如 Kaggle)数据库加载还是将它们上传到 colab 目录然后提取它们? [复制]

如何从 Kaggle 将一个太大的 Kaggle 数据集的选定文件加载到 Colab 中

如何在 Google Colab 中读取 csv 到数据框

python 下载Kaggle数据集到colab笔记本