获取当前 jupyter-lab 笔记本名称 [for Jupyter-lab version 2.1 and 3.0.1 and notebook version >6.0.3)
Get current jupyter-lab notebook name [for Jupyter-lab version 2.1 and 3.0.1 and notebook version >6.0.3)
问题
大家好,
正如我的标题所暗示的那样,我想以变量的形式访问笔记本名称(在 jupyter-lab 中)。所以我可以在笔记本本身中重复使用它(例如命名笔记本中生成的一些图形文件)。
我看到类似的问题在几年前就已经打开了[see here]。但是我没有找到满意的答案。
我喜欢the answer suggested by @bill的简洁:
import ipyparams
currentNotebook = ipyparams.notebook_name
但是,它对我不起作用。我第一次执行第一个单元格时收到此警告:
import ipyparams
Javascript Error: Jupyter is not defined
currentNotebook = ipyparams.notebook_name
currentNotebook
''
然后,如果我再次重新运行 单元格,我就不会再收到警告消息,但变量 currentNotebook
仍然是空的。 (我运行单元格顺序,我没做'Run All Cells')。
配置详情
我的 Jupyter 版本是
jupyter notebook --version
6.0.3]
jupyter-lab --version
2.1.1
我的笔记本主要用于 python 代码。
编辑 2021 年 1 月 27 日
@juan 解决方案 [], using ipynbname 适用于
jupyter-notebook : 6.1.6
jupyter lab : 2.2.6
但此解决方案仍然不适用于 jupyter lab : 3.0.1
编辑 28/01/2021
ipynbname 现在正在为 jupyter 3 工作
更多详情[here]
您需要将导入代码放在函数上方的单独单元格中 (ipyparams.notebook_name)。否则它会尝试 运行 库完全加载之前的代码,所以 currentNotebook 变量仍然是空白。将导入内容放在自己的单元格中会强制它在移动到单元格 #2 之前加载。
作为替代方案,您可以使用以下库:ipynbname
#! pip install ipynbname
import ipynbname
nb_fname = ipynbname.name()
nb_path = ipynbname.path()
这对我有用,而且解决方案非常简单。
对于那些缺少 ipynbname
的人,这个 JavaScript hack 将用于获取 Jupyter notebook 文件名和路径并将它们保存到 Python 可访问的变量中。但是,您无法在使用 运行 JavaScript 代码的同一单元格中访问这些变量。所以如果你想对变量做任何事情,它将需要第二个单元格。
概念验证:一个简单的 Jupyter 笔记本,world.ipynb
,在目录 hello
.
中
单元格 #1:
def get_notebook_name():
"""Execute JS code to save Jupyter notebook name to variable `notebook_name`"""
from IPython.core.display import Javascript, display_javascript
js = Javascript("""IPython.notebook.kernel.execute('notebook_name = "' + IPython.notebook.notebook_name + '"');""")
return display_javascript(js)
def get_notebook_path():
"""Execute JS code to save Jupyter notebook path to variable `notebook_path`"""
from IPython.core.display import Javascript, display_javascript
js = Javascript("""IPython.notebook.kernel.execute('notebook_path = "' + IPython.notebook.notebook_path + '"');""")
return display_javascript(js)
# execute javascript
get_notebook_name()
get_notebook_path()
单元格 #2
# print results
print(f"{notebook_name=}")
print(f"{notebook_path=}")
结果:
notebook_name='world.ipynb'
notebook_path='hello/world.ipynb'
问题
大家好,
正如我的标题所暗示的那样,我想以变量的形式访问笔记本名称(在 jupyter-lab 中)。所以我可以在笔记本本身中重复使用它(例如命名笔记本中生成的一些图形文件)。
我看到类似的问题在几年前就已经打开了[see here]。但是我没有找到满意的答案。
我喜欢the answer suggested by @bill的简洁:
import ipyparams
currentNotebook = ipyparams.notebook_name
但是,它对我不起作用。我第一次执行第一个单元格时收到此警告:
import ipyparams
Javascript Error: Jupyter is not defined
currentNotebook = ipyparams.notebook_name
currentNotebook
''
然后,如果我再次重新运行 单元格,我就不会再收到警告消息,但变量 currentNotebook
仍然是空的。 (我运行单元格顺序,我没做'Run All Cells')。
配置详情
我的 Jupyter 版本是
jupyter notebook --version
6.0.3]
jupyter-lab --version
2.1.1
我的笔记本主要用于 python 代码。
编辑 2021 年 1 月 27 日
@juan 解决方案 [
jupyter-notebook : 6.1.6
jupyter lab : 2.2.6
但此解决方案仍然不适用于 jupyter lab : 3.0.1
编辑 28/01/2021
ipynbname 现在正在为 jupyter 3 工作
更多详情[here]
您需要将导入代码放在函数上方的单独单元格中 (ipyparams.notebook_name)。否则它会尝试 运行 库完全加载之前的代码,所以 currentNotebook 变量仍然是空白。将导入内容放在自己的单元格中会强制它在移动到单元格 #2 之前加载。
作为替代方案,您可以使用以下库:ipynbname
#! pip install ipynbname
import ipynbname
nb_fname = ipynbname.name()
nb_path = ipynbname.path()
这对我有用,而且解决方案非常简单。
对于那些缺少 ipynbname
的人,这个 JavaScript hack 将用于获取 Jupyter notebook 文件名和路径并将它们保存到 Python 可访问的变量中。但是,您无法在使用 运行 JavaScript 代码的同一单元格中访问这些变量。所以如果你想对变量做任何事情,它将需要第二个单元格。
概念验证:一个简单的 Jupyter 笔记本,world.ipynb
,在目录 hello
.
单元格 #1:
def get_notebook_name():
"""Execute JS code to save Jupyter notebook name to variable `notebook_name`"""
from IPython.core.display import Javascript, display_javascript
js = Javascript("""IPython.notebook.kernel.execute('notebook_name = "' + IPython.notebook.notebook_name + '"');""")
return display_javascript(js)
def get_notebook_path():
"""Execute JS code to save Jupyter notebook path to variable `notebook_path`"""
from IPython.core.display import Javascript, display_javascript
js = Javascript("""IPython.notebook.kernel.execute('notebook_path = "' + IPython.notebook.notebook_path + '"');""")
return display_javascript(js)
# execute javascript
get_notebook_name()
get_notebook_path()
单元格 #2
# print results
print(f"{notebook_name=}")
print(f"{notebook_path=}")
结果:
notebook_name='world.ipynb'
notebook_path='hello/world.ipynb'