从 Jupyter Notebook 导入子文件夹文件

Import subfolder file from Jupyter Notebook

文件夹结构如下:

~/
 +-- some_module/
 |      +-- subfolder/
 |      |      +-- submodule.py
 |      +-- helpers.py
 |      +-- api.py
 +-- notebook.ipynb

这是api.py的内容:

from subfolder.submodule import submodule_fun

def print_something(string):
    print(submodule_fun(string))

# ...

if __name__ == '__main__':
    run()

submodule.py

from helpers import helper_fun

def submodule_fun(string):
    stuff = helper_fun(string)
    return stuff

当从命令行 运行 python api.py 时,这工作得很好。 submodule.py 文件只是简单地使用了 helpers.py 中的一些函数,不需要戏剧化。

但是,我也希望能够使用住在 some_module 之外的 notebook.ipynbsubmodule.py。当我在此笔记本中添加以下行时:

from some_module.subfolder import submodule

我收到以下错误:

~/some_module/subfolder/submodule.py in <module>

---> from helpers import helper_fun

ModuleNotFoundError: No module named 'helpers'

我尝试使用 setuptools 将所有 some_module 打包到一个合适的模块中,但我 运行 遇到了奇怪的错误,显然是因为该模块不直接存在于存储库的根目录中.

在这种情况下,如果不诉诸打包 some_module,是否有办法能够从 notebook.ipynb 访问 submodule.py

尝试通过 OS 或编程方式(如下所示)将 some_module 添加到您的 PATH 或 PYTHONPATH 环境变量

import sys
import os

abspath = r"c:\your\path\to\some_module"
sys.path.append(os.path.abspath(abspath ))

from some_module.subfolder import submodule

作为打包的替代方法,您可以使用 poetry 来管理您的依赖项、虚拟环境,它会将您的项目安装到环境中,而无需实际生成包。