B从A导入到B时,可以使用两次!cp将文件从B导入到C吗?

问题描述 投票:0回答:1

我想做的是将函数和变量从名为 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 无法访问本地文件,或者类似的问题。我想这个问题可以结束了吗?

python import jupyter-notebook syntax-error
1个回答
0
投票

我无法发表评论,但我会问“将 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 文件导入函数

© www.soinside.com 2019 - 2024. All rights reserved.