我想做的是将函数和变量从名为 A 的 .ipynb 文件导入到 B.ipynb,然后将函数和变量从 B 导入到 C.ipynb。这些文件位于 Google Colab 中。
我这样做的方法是将A下载为.py文件,然后在B中使用以下代码看似访问A.py:
!cp /content/drive/MyDrive/Colab_Notebooks/buildmergegraph8.py /content
随后:
from buildmergegraph8 import *
这运行得很好,当我在 B 中调用时,我可以访问 A 中的函数。接下来是问题,当我尝试使用 C.ipynb 中的以下行从 B 导入到 C 时:
!cp /content/drive/MyDrive/Colab_Notebooks/training_and_test_merge_graphs_with_labels.py /content
from training_and_test_merge_graphs_with_labels import *
这将返回以下错误。为了清楚起见,语法错误向上箭头指向 !在!cp:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/IPython/core/interactiveshell.py", line 3553, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-3-5391baf2e3b0>", line 1, in <cell line: 1>
from training_and_test_merge_graphs_with_labels import *
File "/content/training_and_test_merge_graphs_with_labels.py", line 25
!cp /content/drive/MyDrive/Colab_Notebooks/buildmergegraph8.py /content
^
SyntaxError: invalid syntax`
我注意到这个错误的最后一行,问题实际上是 .py 文件
training_and_test_merge_graphs_with_labels.py
中的调用,这是 training_and_test_merge_graphs_with_labels.ipynb
的 .py 版本。我认为问题是 Training_and_test_merge_graphs_with_labels.py 文件是 .ipynb 文件的下载,并且该 .ipynb 文件具有我上面的问题中的前两行书面代码。基本上,您无法在 .py 文件中执行 !cp。
我最后一句话正确吗?如果是这样,我如何将函数和变量从 A 导入到 B,然后从 B 导入到 C(如果它们都是 .ipynb)?
我期望能够将函数和变量从 A.ipynb 导入到 B.ipynb,以及从 B.ipynb 导入到 C.ipynb,但我可能选择了一种不允许这样做的方法,或者有一个更好的选择确实允许这样做。
任何帮助都会很棒,尤其是避免我需要为 .ipynb 文件创建 .py 文件的解决方案。
编辑:我后来发现该错误是 Google Colab 问题:GC 无法访问本地文件,或者类似的问题。我想这个问题可以结束了吗?
我无法发表评论,但我会问“将 A 下载为 .py 文件”是什么意思。
我认为有 2 种可能的解决方案可能是合适的。
第一个解决方案(简单也是我首选的解决方案)
将所有相关变量和函数保存在某个 .py 文件中(例如
foo.py
),并将该文件保存在与 A.ipynb
、B.ipynb
和 C.ipynb
相同的目录中。目录结构示例:
dir/
A.ipynb
B.ipynb
C.ipynb
foo.py
然后在您的笔记本中,您可以使用
导入相同的函数from foo import some_function
第二种解决方案
使用
ipynb
库直接从笔记本导入相关函数和其他代码。使用下载它
pip install ipynb
然后,使用
将函数、类和导入语句从
A.ipynb
导入到
B.ipynb
和
C.ipynb
# for specific imports
import ipynb.fs
from .defs.A import some_function
或者
# For making all functions, classes, and import statements available in the new notebooks
import ipynb.fs.defs.A
我假设
A.ipynb
、B.ipynb
和 C.ipynb
位于同一目录中。
这里是
ipynb
的一些文档:docs
这里有一个类似的问题:从另一个 .ipynb 文件导入函数