>我有一个自定义单元格魔法,我需要从相对路径加载。当模块目录与笔记本位于同一位置时,我可以这样做。但是,当我有一个更复杂的目录结构时,它不起作用。
如果目录结构如下,则它有效:
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)
似乎有效!