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

如果目录结构是这样,它将起作用:

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)


似乎可以工作!

关于python - 如何从相对目录(在Jupyter笔记本中)加载自定义细胞魔法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59639658/

10-12 17:43
查看更多