【问题标题】:google colab ipython notebook cannot import most recent functions defined in another notebook located in the same google drive and foldergoogle colab ipython notebook 无法导入位于同一 google 驱动器和文件夹中的另一个笔记本中定义的最新功能
【发布时间】:2021-10-17 15:15:59
【问题描述】:

我正在使用 google colab ipython notebook 进行一些编码工作。在 book1 中,我需要调用 book2 中定义的一些函数。

Book1 和 book2 都位于同一个谷歌驱动器和同一个文件夹中。

书1:

 from google.colab import drive
 drive.mount('/content/drive', force_remount=True)
 from kora import drive as kora_drive
 kora_drive.link_nbs()
 
 import book2 as b2
 b2.function1()
 

书2:

 def function1():
     print('function1 called')

当我从 book 链接 book2 时,function1() 可以成功调用。 但是,如果我更改了 book2 中的一些代码,例如,在 book2 中添加了一个新函数

 def function2():
     print('function2 called')

在 book2 中进行更改后,我单击“保存”并刷新了驱动器和文件夹以及 book2 和 book1。但是,当我尝试从 book1 调用 function2 时,出现错误:

 AttributeError: module 'book2' has no attribute 'function2'

我已经尝试重新安装驱动器并重新导入 book2 并且还尝试了以下两个帖子,但它们都不起作用。

  https://stackoverflow.com/questions/53358250/google-colaboratory-how-to-refresh-google-drive

  https://stackoverflow.com/questions/59020008/how-to-import-functions-of-a-jupyter-notebook-into-another-jupyter-notebook-in-g

谁能指出我在这里错过了什么?

谢谢

UPDTAE

在book1中,我试过了

!pip install import-ipynb
import import_ipynb

import sys
sys.path.insert(1, r'/content/drive/MyDrive/Colab Notebooks/book2.ipynb')

我也试过

 sys.path.insert(1, r'/content/drive/MyDrive/Colab Notebooks/')

但是,仍然无法从 book1.ipynb 中找到“book2”的最新更新。

【问题讨论】:

  • 请看看我更新的答案,如果有意义,请告诉我

标签: python jupyter-notebook google-colaboratory


【解决方案1】:

只是为了确保您的函数位于 py 文件而不是 ipydb 文件中正确吗?

如果它们在 py 文件中,您可以执行以下两种方法之一。

您需要将目录更改为函数所在的目录%cd "mnt/My Drive/Pyfunctions"。确保您知道要导入的 python 文件的位置。

您也可以使用 sys 库来实现这一点,

import sys

sys.path.insert(1, r'/mnt/My Drive/pyfunctions')

看来你第一次已经成功加载了函数,然后你对其进行了更改。我相信这不是谷歌驱动器的工作方式。加载驱动器后,所有文件都是当时文件的快照。进行更改不会影响已加载的文件。

这是我添加函数并尝试重新加载模块后的样子。

进行更改注册的唯一方法是单击 Runtime / Restart Runtime 或 CTRL + M 后跟 . (句号)并重新加载模块。

我已经在我的 colab 运行时中成功完成了这项工作。

【讨论】:

  • 请在 OP 中查看我的更新。我已经尝试过了,但它仍然无法正常工作。谢谢
  • 好的,等我试试
  • @user3448011 嘿,我已经更新了我的答案,我认为您不能像在谷歌驱动器中那样更改文件。你不应该这样做。你应该在加载整个文件之前创建你需要的模块。
  • 每当我更改 book2 时,我都必须重新启动 book1(它会重新加载所有导入模块的快照?)以便 book1 可以获得 book2 的最新快照?
  • 是的,你必须保存对 book2.py 的更改并重新加载 book1.ipydb
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 2020-11-15
  • 2021-12-17
  • 2023-03-26
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多