从另一个jupyter笔记本运行一个jupyter笔记本并使用魔法命令传递参数

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

我无法将参数和/或访问变量从一个 jupyter 笔记本传递到另一个:

使用带有参数的%run

我遇到的第一个问题是使用 %run magic 命令时无法将参数从一个笔记本传递到另一个笔记本。 神奇命令文档。这是笔记本中的代码:
笔记本1:

import pandas as pd
import datetime
import mplfinance as mpf
import numpy as np
import os
from IPython.display import display, HTML
import random
import warnings
display(HTML("<style>.container { width:95% !important; }</style>"))

pd.set_option('display.width', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.expand_frame_repr', False)
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')

%run "notebook2.ipynb" 1 2

这是 Notebook 2 中的代码:

import pandas as pd
import datetime
import mplfinance as mpf
import numpy as np
import os
import sys
from IPython.display import display, HTML
import random
import warnings
display(HTML("<style>.container { width:95% !important; }</style>"))

pd.set_option('display.width', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.expand_frame_repr', False)
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')

print(sys.argv)

我得到的输出不包含我试图传递的任何变量。这是我的名字经过编辑的输出

['C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\ipykernel_launcher.py', '-f', 'C:\\Users\\Name\\AppData\\Roaming\\jupyter\\runtime\\kernel-dc8af21c-af3f-488f-bfef-10c7b8e8f8ea.json']

这是我尝试遵循的另一个 stackoverflow 答案,但没有成功链接

使用%store

因此尝试另一条路线,我决定只存储我想从笔记本一传递到笔记本2的变量/数据帧。这是一个示例,其中包含 stackoverflow 上的答案还有另一个。然而,当我尝试这样做时,我却没有运气。
笔记本1中的代码:

%store df

该单元的输出

Stored 'df' (DataFrame)

在另一个单元格中

var = 1
%store var

该单元的输出

Stored 'var' (int)

现在来看看笔记本 2:

%store -r df
%store -r var

错误信息

TypeError: 'PickleShareDB' object is not subscriptable

我不确定问题是什么,这是我当前的 jupyter 笔记本设置和版本控制。我尝试过重新启动内核。我也使用相同的内核。这些笔记本位于同一目录中。
当前 Jupyter 笔记本版本:

python jupyter-notebook jupyter
1个回答
0
投票

您引用的文档说明该文档适用于 IPython 并使用

.py
文件。因此,如果您更喜欢使用这些功能,请使用 Jupytext 将 notebook2 转换为 Python 文件。或者,继续阅读使用
%run
不同的方式来完成大致相同的任务。

您可以在某种程度上将

%run
与笔记本一起使用。您已经看到它没有像您期望的那样传递参数。对于您的计划来说,重要的是,默认情况下,即使没有
-i
标志,它也会在与源笔记本相同的命名空间中运行它。

使用
%run
:依靠第二个笔记本位于同一命名空间中来共享分配的变量

对于

notebook1.ipynb

import pandas as pd
import datetime
#import mplfinance as mpf
import numpy as np
import os
from IPython.display import display, HTML
import random
import warnings
display(HTML("<style>.container { width:95% !important; }</style>"))

pd.set_option('display.width', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.expand_frame_repr', False)
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')

a = 1
b = 2
%run "notebook2.ipynb" 

对于笔记本 2:

import pandas as pd
import datetime
#import mplfinance as mpf
import numpy as np
import os
import sys
from IPython.display import display, HTML
import random
import warnings
display(HTML("<style>.container { width:95% !important; }</style>"))

pd.set_option('display.width', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.expand_frame_repr', False)
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')

print(sys.argv)

print(a)
print(b)

(我注释掉了对我的环境不必制作你的玩具代码的包的引用,更多玩具。)

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