在Google Colab中导入.py文件

152

有没有办法上传我的.py文件并在colab代码单元格中导入它们?

我找到的另一种方法是创建本地Jupyter笔记本,然后将其上传到Colab,这是唯一的方法吗?

16个回答

162

您可以先保存它,然后再导入。

from google.colab import files
src = list(files.upload().values())[0]
open('mylib.py','wb').write(src)
import mylib

更新(2018年11月):现在您可以通过以下方式轻松上传:

  • 点击[>]打开左侧面板
  • 选择文件选项卡
  • 单击 [上传] 并选择您的 [mylib.py]
  • 导入 mylib

更新(2019年10月):如果您不想每次都上传,您可以将其存储在 S3 中并将其挂载到 Colab,如 此处的 gist 所示。

更新(2020年4月):现在您可以自动挂载 Google Drive。从驱动器复制它比上传更容易。

  • mylib.py存储在您的云端硬盘中
  • 打开新的 Colab 笔记本
  • 在(左侧)边窗格中选择“文件”视图
  • 单击“挂载驱动器”,然后单击“连接到Google Drive”
  • 使用!cp drive/MyDrive/mylib.py .命令将其复制到Colab中
  • import mylib

2
@rsam 然后尝试第二种方法。我尝试了它,对我有效。 - korakot
3
如果您使用文件选项卡方法,每次运行时都需要重复上传。 - information_interchange
1
我现在添加了一个方法,将其存储在S3中,这样您就不需要再次上传。 - korakot
8
你忘记在末尾加句号"."了。 - korakot
1
我花了一些时间才发现我忘记在 !cp drive/MyDrive/mylib.py . 的末尾添加 .。不管怎样,这是一个干净而美好的解决方案。解决了我的大问题。非常感谢。此外,我真的很感激您随时更新答案中的colab。真的非常感谢。 - Mainland
显示剩余6条评论

120

如果有其他人想知道如何在Google Colab中从Google Drive导入文件/程序包,请参照以下步骤:

1)在Google Colab中挂载您的Google Drive:

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

2) 使用sys将目录添加到你的Python路径中:

import sys
sys.path.append('/content/gdrive/mypythondirectory')

现在你应该能够从那个目录导入内容了!


1
你好。谢谢。但是我正在寻找导入依赖于其他文件的Python文件。我可以这样做吗? - Avv
从google.colab导入驱动器 导入sysdrive.mount('/content/gdrive') colab_notebooks_path = "gdrive/MyDrive/Colab Notebooks/"sys.path.append(colab_notebooks_path) - Mahdi Mohammadizadeh

19
  1. 使用google.colab.files中的upload()函数,您可以将本地文件上传到Google Colab。
  2. 如果您在GitHub上有文件,则使用!git clone https://github.com/username/repo_name.git克隆存储库。然后,就像在jupyter笔记本中一样,使用魔术函数%load %load filename.py加载它。

1
第二种方法对我起作用了,我只需要添加存储库的名称:%load repo_name/filename.py - xyzjayne
1
@xyzjayne 你试过导入它吗?我可以成功加载它,但无法将其作为模块使用。 - information_interchange

15

根据Korakot Chaovavanich的回答,我创建了下面的函数来下载Colab实例中所需的所有文件。

from google.colab import files
def getLocalFiles():
    _files = files.upload()
    if len(_files) >0:
       for k,v in _files.items():
         open(k,'wb').write(v)
getLocalFiles()
您可以使用常规的“import”语句在Colab中导入您的本地文件。希望这可以帮助您。

您可以使用常规的“import”语句在Colab中导入您的本地文件。希望这可以帮助您。


谢谢,我是一个新手,这是唯一一个我理解如何实现并且对我有效的答案。 - NeStack

7
我们可以做到。
import sys
import os

py_file_location = "/content/drive/My Drive"
sys.path.append(os.path.abspath(py_file_location))

现在,您可以将其作为模块导入到笔记本中,以供该位置使用。
import whatever

“/content” 不包含 “drive”。因此无法访问我的文件。 - Leonid Mednikov
/content不包含drive。因此无法访问我的文件。 - undefined

4

我也遇到了同样的问题。在阅读了大量的帖子后,我想介绍一下我最终选择的以下解决方案(例如使用urllibhttpimport、从GitHub克隆、打包模块进行安装等等方法)。该解决方案利用了Google Drive API官方文档)进行适当授权。

优点:

  1. 易于操作且安全(不需要代码来处理文件操作异常和/或额外的授权)
  2. 使用Google帐户凭据保护模块文件(其他人无法查看/拿走/编辑)
  3. 您可以控制上传/访问什么(您可以按文件更改/撤销访问权限)
  4. 所有内容都在一个地方(不需要依赖或管理另一个文件托管服务)
  5. 自由地重命名/移动模块文件(不基于路径,不会破坏您/他人的笔记本代码)

步骤:

  1. 将您的.py模块文件保存到Google Drive中-您应该已经拥有这个,因为您已经在使用Colab
  2. 右键单击它,“获取共享链接”,复制“id =”后面的部分-由Google Drive分配的文件ID
  3. 添加并运行以下代码片段到您的Colab笔记本中:
!pip install pydrive                             # Package to use Google Drive API - not installed in Colab VM by default
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

from google.colab import auth                    # Other necessary packages
from oauth2client.client import GoogleCredentials

auth.authenticate_user()                         # Follow prompt in the authorization process
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()

drive = GoogleDrive(gauth)
your_module = drive.CreateFile({"id": "your_module_file_id"})   # "your_module_file_id" is the part after "id=" in the shareable link
your_module.GetContentFile("your_module_file_name.py")          # Save the .py module file to Colab VM
import your_module_file_name                                    # Ready to import. Don't include".py" part, of course :)

补充说明

最后,我应该要感谢这个原始贡献者提供的方法。那篇文章可能存在代码错误,当我尝试时它会触发一个错误。通过更多阅读和排除故障,我的代码段上面的方法可以正常工作(在Colab VM操作系统:Linux 4.14.79上测试成功,截至今天)。


1
当我尝试调用导入的Python文件中的函数时,这段代码会给我报错。 - Leothorn

3

可以尝试这种方法:

我有一个名为plant_seedlings的包,它存储在Google Drive中。我需要做的是将此包复制到/usr/local/lib/python3.6/dist-packages/中。

!cp /content/drive/ai/plant_seedlings.tar.gz /usr/local/lib/python3.6/dist-packages/

!cd /usr/local/lib/python3.6/dist-packages/ && tar -xzf plant_seedlings.tar.gz

!cd /content

!python -m plant_seedlings

对我没有用。 "/content" 目录中没有 "drive" 子目录。 - Alexey Tigarev
我不确定这个答案,但对于你的问题,你应该先单击 Google Drive 的 “挂载驱动器” 按钮。然后驱动器文件夹将出现在内容文件夹下面。 - Tekin

2
以下是对我有效的步骤:
1. 挂载您的Google驱动器到Google Colab 从google.colab导入驱动程序 drive.mount('/content/drive')
2. 插入目录 导入sys sys.path.insert(0,'/content/drive/My Drive/ColabNotebooks')
3. 检查当前目录路径 %cd drive/MyDrive/ColabNotebooks %pwd
4. 导入您的模块或文件 导入my_module 5. 如果出现“名称Null未定义”的错误,请执行以下操作: 5.1 从Colab下载my_module.ipynb作为my_module.py文件(文件->下载.py) 5.2 将*.py文件上传到Google驱动器中的drive/MyDrive/ColabNotebooks 5.3 现在导入my_module将起作用

Reference: https://medium.com/analytics-vidhya/importing-your-own-python-module-or-python-file-into-colab-3e365f0a35ec

https://github.com/googlecolab/colabtools/issues/1358


2
这是我的流程:
import sys 
sys.path.insert(0, '/content/drive/MyDrive/my_folder')
%cd /content/drive/MyDrive/my_folder
%pwd

现在,你可以轻松使用 import my_module 从该路径导入模块。

2

这是我经常的做法:

  1. 将我的模块保存在目录中。例如:MyModules文件夹下的MyFile.py

  2. 定义我的模块位置:

    path_m = '/content/drive/MyDrive/Colab Notebooks/MyModules/'

  3. 然后将路径添加到sys.path中:

    import sys
    
    sys.path.insert(0,path_m)
    
  4. 在我的Jupyter/Google Colab笔记本中导入模块。

    import MyFile


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接