Jupyter Lab/Notebook 魔法命令 %load 与平台独立路径

Jupyter Lab/Notebook magic command %load with platform independent path

我正在尝试开发一个 Jupyter 笔记本,其中包含具有 %load 魔术命令的单元格,可以从其他地方加载代码。此代码与笔记本所在的目录不在同一目录中。我希望它适用于 Windows、Linux 和 Mac,因此路径分隔符有时应该是“\”,有时是“/”。

通常我会使用os.path.join来解决这个问题。然而,当我在加载命令中执行此操作时,notebook 只是评估路径,并没有实际加载代码。除了首先更改工作目录并在执行我加载的代码后将其改回之外,有没有办法做到这一点?

简要示例:

import os
%load os.path.join('example', 'file.py')

这会出错,因为它实际上会搜索名称为 os.path.join('example', 'file.py') 的文件。如果我首先对其进行评估并将结果放入负载中,我会得到:

import os
to_include = os.path.join('example', 'file.py')
print(to_include)
%load to_include

计算结果为

# %load to_include
example/file.py

但显然我想要加载那个文件的内容,而不是路径+文件名。我做错了什么?

在 Jupyter 中,您必须以类似 bash 的语法扩展变量,以便它们在魔术函数中工作。

这就是为什么您必须使用 $ 符号的原因。 你的情况:

import os
to_include = os.path.join('example', 'file.py')
%load $to_include