如何防止fastai fastbook在Google Colab中运行时请求访问Google Drive?

pau*_*san 4 google-colaboratory fast-ai

在 Google Colab 中设置 Fastbook 时,它会请求权限才能访问我的 Google 云端硬盘。这是我得到的提示:

允许此笔记本访问您的 Google 云端硬盘文件吗?

此笔记本正在请求访问您的 Google 云端硬盘文件。授予对 Google Drive 的访问权限将允许在笔记本中执行代码来修改 Google Drive 中的文件。在允许此访问之前,请务必检查笔记本代码。

[不用了,谢谢] [连接到 Google 云端硬盘]

由于我在我的 Google 帐户上运行外部(并且可能不安全)代码,因此我不愿意向 Google 云端硬盘授予权限。

看来请求许可的电话是:fastbook.setup_book()

如何阻止 fastai 的 fastbook 请求访问 Google 云端硬盘?如果我不授予权限,则会发生以下错误,并且我不确定它是否已初始化:

---------------------------------------------------------------------------
MessageError                              Traceback (most recent call last)
<ipython-input-8-fce0e354ba4c> in <module>
----> 1 fastbook.setup_book()

5 frames
/usr/local/lib/python3.7/dist-packages/google/colab/_message.py in read_reply_from_input(message_id, timeout_sec)
    100         reply.get('colab_msg_id') == message_id):
    101       if 'error' in reply:
--> 102         raise MessageError(reply['error'])
    103       return reply.get('data', None)
    104 

MessageError: Error: credential propagation was unsuccessful
Run Code Online (Sandbox Code Playgroud)

pau*_*san 6

在查看 fastbook 模块源代码和初始化之后,我发现了三种防止 fastai fastbook 在 Google Colaboratory 中运行时询问 Google Drive 权限的方法。截至撰写本文时,这三种方法都有效,您可以安全地使用这三种方法中的任何一种。

1.创建/content/gdrive/My Drive目录

fastbook/__init__.py 中的 setup_colab 函数检查 google 驱动器是否已安装。如果你让它相信它已经安装了,它就不会尝试再次安装它。

为此,只需在笔记本的开头添加这两行:

import os
os.makedirs ('/content/gdrive/My Drive', exist_ok = True)
Run Code Online (Sandbox Code Playgroud)

然后运行它,然后您就可以运行它import fastbook及其安装程序而不会出现任何错误。

2. 不执行fastbook.setup_book()(或注释该行)

它使setup_book代码仅检查它是否在 colab 内运行,如果是,它将您的 google 驱动器安装到此文件夹中:/content/gdrive/并创建全局变量“gdrive”,该变量指向/content/gdrive/My Drive在那里保存内容并具有持久性的便捷方法。

在撰写本文时,如果您不执行 fastbook.setup_book() 或注释掉该行,那就完全没问题;笔记本的其余部分将运行得很好。同样,“setup”所做的唯一事情就是调用“setup_colab()”,以便为笔记本设置 Google Drive,以便能够具有一定的持久性(无论如何,这可能不会在某些笔记本上使用)。

您只需将初始化更改为:

! [ -e /content ] && pip install -Uqq fastbook
import fastbook
# fastbook.setup_book()
Run Code Online (Sandbox Code Playgroud)

3. 尝试/排除fastbook.setup_book()

如果您将此调用嵌入到 try/ except 中,它将不会返回该错误。这是初始化的样子:

! [ -e /content ] && pip install -Uqq fastbook
import fastbook
try: 
  fastbook.setup_book()
except:
  pass
Run Code Online (Sandbox Code Playgroud)

最后的想法

截至撰写本文时(2022 年),该函数setup_book仅初始化 colab 中的 google 驱动器,但这可能在将来发生变化(例如,为了初始化其他内容)。最好的解决方案可能是只使用我描述的第一种方法并创建文件夹,以便 fastbook 相信它已经安装了它,因此如果 setup_book 调用将来发生变化以包含其他类型的初始化,我们将不会阻止它从发生。

无论如何,检查源代码并了解幕后发生的事情总是好的。

据我在代码中看到的,授予权限应该没有什么坏处,因为它唯一做的就是安装 Google Drive,以便允许笔记本永久保存数据,这样您就可以在执行过程中获得该数据。但是,请注意,因为这并不意味着从任何这些脚本导入的另一个库可能会利用已授予权限的事实并将您的私人文档或其他内容复制到其他地方,甚至勒索您的文档。我猜测如果发生类似的事情,fast.ai 社区很可能会很快发现并解决;说实话,我可能对这些东西有点“偏执”,只授予权限可能完全没问题,但以防万一我更喜欢在安全/偏执方面犯错。

另一种选择是使用空驱动器创建另一个 Google 帐户,然后从那里运行笔记本,而不必担心授予权限。