如何从相对目录加载自定义单元格魔法(在 Jupyter 笔记本中)?



>我有一个自定义单元格魔法,我需要从相对路径加载。当模块目录与笔记本位于同一位置时,我可以这样做。但是,当我有一个更复杂的目录结构时,它不起作用。

如果目录结构如下,则它有效:

test_custom_magic
|-custom_magic_code
|-__init__.py
|-etcetc.py
|-test_notebook.ipy

在这种情况下,我只需执行一个%reload_ext custom_magic_code,我的代码就可以工作。

但是,现在我已经完成了代码的编写和测试,我正在尝试在更复杂的目录中使用它:

important_project
|-notebooks
|-do_something_important.ipy
|-do_something_else_important.ipy
|-custom_magic_code
|-__init__.py
|-etcetc.py

do_something_important.ipy,我不能只是%reload_ext custom_magic_code。我得到一个ModuleNotFoundError.

如果我尝试%reload_ext ../custom_magic_code(或其他嵌套目录级别(,则会出现此错误:TypeError: the 'package' argument is required to perform a relative import for '../custom_magic_code'

如何解决这个问题? 请注意,我的自定义魔术代码足以让我在本地运行。我还没有准备好打包它并通过pip/conda/nbextension安装(无论如何,我都试图避免学习它,直到我可以让我当前的代码工作(。

所以我最终使用以下代码在python检查以查找库的路径中包含相关目录:

module_path = os.path.abspath(os.path.join('../..'))
if module_path not in sys.path:
sys.path.append(module_path)

似乎有效!

最新更新