来自不在 'main.py' 级别的笔记本中的相对导入

Relative imports from within a notebook that is not at the 'main.py' level

我的结构如下所示:

/src
    __init__.py
    module1.py
    module2.py
/tests
    __init__.py
    test_module1.py
    test_module2.py
/notebooks
    __init__.py   
    exploring.ipynb
main.py

我想使用笔记本 'exploring' 进行一些数据探索,为此我需要执行 module1module2 的相对导入。但是如果我尝试 运行 from ..src.module1 import funct1,我会收到一个 ImportError: attempted relative import with no known parent package 我知道这是预期的 因为我 运行ning notebook 就好像它是一个脚本而不是一个模块。

因此,作为一种解决方法,我主要是在每次需要使用时将笔记本从其文件夹中拉出到 main.py 级别,然后 from src.module1 import funct1 工作。

我知道相对导入已经有大量线程,但到目前为止我找不到更简单的解决方案来完成这项工作而不必每次都移动笔记本。鉴于调用时笔记本 运行宁“作为脚本”,有什么方法可以执行此相对导入?

脚本不能进行相对导入。你有没有考虑过这样的事情:

if __name__ == "__main__":
    sys.path.insert(0,
        os.path.abspath(os.path.join(os.getcwd(), '..')))
    from src.module1 import funct1
else:
    from ..src.module1 import funct1

或使用例外:

try:
    from ..src.module1 import funct1
except ImportError:
    sys.path.insert(0,
        os.path.abspath(os.path.join(os.getcwd(), '..')))
    from src.module1 import funct1

?