You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将.ipynb与.py文件归类到子文件夹并实现跨目录导入?

现有环境变量+切换目录方法的弊端
  • 路径依赖与配置繁琐:必须确保环境变量MY_PROJECT_PATH已正确设置,换环境(本地、服务器、协作伙伴的机器)时都要重复配置,一旦路径写错或环境变量未设置,所有导入都会直接失败。
  • 工作目录混乱:os.chdir()会改变整个笔记本的全局工作目录,后续如果用相对路径读写笔记本所在目录的文件(比如notebooks/sub/analysis_data.csv),会被解析为相对于project根目录的路径,导致文件找不到或误写入其他位置。
  • 代码冗余与维护成本高:每个笔记本都要复制粘贴这段路径处理代码,后续如果项目目录结构调整,需要逐个修改所有笔记本的代码,非常麻烦。
  • IDE功能失效:VS Code、PyCharm等IDE的代码提示、模块跳转功能依赖当前工作目录和Python路径,切换目录后可能无法正确识别src下的模块,影响开发效率。
更优实现方案

方案1:动态添加项目根目录到Python路径

无需切换工作目录,直接将project根目录加入Python的模块搜索路径,既不影响文件读写的相对路径,又能正常导入src模块。示例代码:

import sys
from pathlib import Path

# 从当前笔记本路径向上回溯到project根目录(假设笔记本在notebooks文件夹下)
project_root = Path.cwd().parent
# 如果笔记本在notebooks的子文件夹里,就多写一个.parent:Path.cwd().parent.parent

sys.path.append(str(project_root))

# 现在可以正常导入
from src.dummy import *

可以把这段获取根目录的逻辑封装成notebooks/utils.py里的函数,其他笔记本直接导入调用,减少代码冗余。

方案2:将项目设为可安装包(推荐)

把项目按照Python标准包结构配置,用开发模式安装后,无论笔记本在哪个位置,都能直接导入src模块,这是最规范的长期解决方案。

  1. 在project根目录创建pyproject.toml文件:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "my_project"
version = "0.1.0"
packages = ["src"]
  1. 在project根目录执行开发安装命令:
pip install -e .

之后所有笔记本里无需任何路径处理代码,直接写from src.dummy import *即可,IDE的代码提示、跳转功能也能完美工作。

方案3:配置Jupyter默认工作目录

如果只用Jupyter Notebook/Lab做开发,可以修改Jupyter配置,把默认工作目录设为project根目录,启动Jupyter后直接在根目录下操作,无需处理路径:

  1. 生成Jupyter配置文件:
jupyter notebook --generate-config
  1. 打开生成的配置文件(一般路径为~/.jupyter/jupyter_notebook_config.py),找到c.NotebookApp.notebook_dir,取消注释并设置为project的绝对路径:
c.NotebookApp.notebook_dir = "/绝对路径/到/你的/project"
  1. 重启Jupyter后,默认就会进入project根目录,笔记本可以直接导入src和访问data文件夹。

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:05:30