Jupyter Notebook导入utils.py遇相对导入错误,求Pythonic方案或结构优化
Pythonic方式导入utils.py的可行方案
方案1:通过VS Code工作区配置识别资源目录
在仓库根目录phd-notebooks下创建.vscode/settings.json文件,写入以下配置:
{ "python.analysis.extraPaths": ["${workspaceFolder}/notebooks"] }
之后用VS Code打开phd-notebooks文件夹作为工作区,所有笔记本即可直接使用绝对导入:
from resources import utils
此方法无需修改代码,其他人克隆仓库后只要用VS Code打开根目录就能直接运行笔记本。
方案2:以仓库根目录为工作目录,使用完整包路径导入
- 给
notebooks、resources、notebooks-group-1、notebooks-group-2目录都添加空的__init__.py文件,标记这些目录为Python包。 - 确保VS Code的工作目录是
phd-notebooks(直接打开该文件夹即可)。 - 在笔记本中使用完整包路径导入:
from notebooks.resources import utils
这种方式完全符合Python包导入规范,其他人只要保持工作目录在仓库根目录就能正常运行。
关于仓库结构的说明
你的当前结构本身没有问题,但需注意:
- Jupyter笔记本直接运行时,不会被当作包的一部分执行,因此无法使用
..这类相对导入(相对导入仅适用于包内部模块的导入场景)。 - 之前添加
__init__.py无效,核心原因是工作目录设置在notebooks-group-1,导致Python无法识别上层的notebooks包。
内容的提问来源于stack exchange,提问作者fma
相关产品推荐
相关产品推荐

