在Google Colab中导入.py文件


Answers:


88

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

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,如本要点所示。

更新(2020年4月):现在您可以自动安装Google云端硬盘了。仅从云端硬盘复制它比上传它容易。

  • 储存mylib.py在云端硬碟中
  • 打开一个新的Colab
  • 打开(左侧)窗格,选择Files视图
  • Mount Drive然后点击Connect to Google Drive
  • 复制者 !cp "drive/My Drive/mylib.py" .
  • import mylib

@rsam然后尝试第二种方法。我尝试过,它对我有用。
korakot

files.upload()当前在Firefox中不起作用。另一种方法是将其上传到Google云端硬盘,然后从笔记本电脑使用PyDrive进行下载。
阿列克谢·蒂加列夫

2
如果使用文件选项卡方法,则必须在每个运行时重复上载
information_interchange

1
现在,我添加了将其存储在S3中的方法,因此您无需再次上传。
korakot19年

4
@eswaraamirthans您忘记了点“。” 在最后。
korakot

51

万一其他人有兴趣知道如何从Google Colab内的gdrive导入文件/包。以下过程对我有用:

1)在Google Colab中挂载您的Google驱动器:

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

2)使用sys将目录追加到您的python路径:

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

现在您应该可以从该目录导入东西了!


11
  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
有用

1
@xyzjayne您尝试导入了吗?我可以很好地加载它,但不能将其用作模块
information_interchange

9

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

然后,您可以使用通常的“导入”语句将您的本地文件导入Colab。我希望这有帮助


谢谢,我是noobie,这是我了解如何实现的唯一答案,它对我
有用

3

我面临着同样的问题。阅读了大量文章后,我想介绍以下解决方案,我最终选择了许多其他方法(例如use urllibhttpimport从GitHub克隆,打包要安装的模块等)。该解决方案利用Google Drive API官方文档)进行适当的授权。

好处:

  1. 简单安全(无需代码来处理文件操作异常和/或其他授权)
  2. 由Google帐户凭据保护的模块文件(没有其他人可以查看/获取/编辑它们)
  3. 您可以控制上传/访问的内容(可以随时在逐个文件的基础上更改/撤消访问)
  4. 一切都集中在一个地方(无需依赖或管理另一种文件托管服务)
  5. 可以重命名/重定位模块文件(不是基于路径的,不会破坏您/他人的笔记本代码)

脚步:

  1. 将.py模块文件保存到Google云端硬盘-您应该已经拥有该文件,因为您已经在使用Colab
  2. 右键单击它,“获取共享链接”,然后在“ id=”之后复制部分-Google云端硬盘分配的文件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 OS:Linux 4.14.79上)。


1
嗯,当我尝试在导入的py文件中调用函数时,此代码给我错误
Leothorn

2

尝试这种方式:

我有一个名为plant_seedlings的软件包。该软件包存储在Google驱动器中。我应该做的是将此包复制到/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”子目录。
阿列克谢·蒂加列夫

我不确定这个答案,但是对于您的问题,您应该先单击Mount DriveGoogle Drive的按钮。然后,驱动器文件夹将出现在内容文件夹下。
特勤

2

我们可以做到。

import sys
import os

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

现在您可以将其作为模块导入该位置的笔记本中。

import whatever

1

您可以将这些.py文件上传到Google驱动器,并允许Colab对其使用:

!mkdir -p drive
!google-drive-ocamlfuse drive

根文件夹中的所有文件和文件夹都位于中drive


您首先必须为Google驱动器安装FUSE文件系统,然后才能这样做
FPcond '18年

实际上,我的作品仅适用于上面的那些行。你有试过吗
Huyen

0

现在是2019年6月。确保在Python包中__init__.py所有相关文件都已按顺序导入。将代码推送到Git或使用此代码

例如

from .Boxes import *
from .Circles import *
from .Rectangles import *
...

不要在__init__.py文件中使用包名称来导入文件。

在Google colab中,

! rm -rf SorghumHeadDetection
! git clone https://github.com/user/amazing-repo-name/

0

一个简单的方法是

  1. 从google.colab中输入导入的上传文件= files.upload()
  2. 复制代码
  3. 粘贴在colab单元中
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.