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

如何在不破坏现有DVC运行逻辑的前提下测试script1.py中的函数?

解决Jupyter Notebook导入src模块时的依赖问题

以下几种方法可以在不破坏原有命令行运行方式的前提下,解决Notebook中导入script1.py时找不到files模块的问题:

方法1:在script1.py中添加条件式路径处理

修改src/script1.py的开头部分,仅当脚本被作为模块导入时(而非直接运行),将src目录添加到Python的搜索路径:

import sys
from pathlib import Path

# 仅在被导入时执行路径添加,不影响直接运行脚本的场景
if __name__ != "__main__":
    src_directory = Path(__file__).parent
    sys.path.append(str(src_directory))

# 原有导入语句保持不变
import files

# 后续的函数逻辑...

当你用python src/script1.py命令行运行时,__name__等于__main__,不会执行路径添加,原有逻辑不受影响;而在Notebook中导入script1时,会自动把src目录加入搜索路径,import files就能找到同目录的模块。

方法2:在Notebook中预先配置路径

不需要修改任何脚本,直接在Notebook的单元格中先将src目录添加到Python路径,再导入模块:

import sys
from pathlib import Path

# 获取项目根目录下的src路径
src_path = Path.cwd() / "src"
sys.path.append(str(src_path))

# 现在可以正常导入
from src import script1

这种方法更灵活,不需要改动现有代码,仅在Notebook环境中做临时配置。

方法3:将src目录标记为Python包(轻量方案)

在src目录下创建一个空的__init__.py文件,将其变成Python包结构:

.
|--src
|----__init__.py
|----files.py
|----script1.py
|----script2.py
|-notebook.ipynb

然后在Notebook中添加项目根目录到路径,再导入目标模块:

import sys
from pathlib import Path

sys.path.append(str(Path.cwd()))

# 直接导入script1中的函数
from src.script1 import your_target_function

这种方法不影响原有命令行运行(python src/script1.py依然正常工作),同时让模块结构更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:15:15