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

解决pytest导入Jupyter Notebook模块的ModuleNotFoundError问题

解决Jupyter Notebook导入到pytest的ModuleNotFoundError问题

尝试从同目录的MyNotebook.ipynb导入add函数到test_add.py执行pytest时,出现以下错误:

ImportError while importing test module '/app/test_add.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/local/lib/python3.11/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
test_add.py:1: in <module>
    from MyNotebook import add
ModuleNotFoundError: No module named 'MyNotebook'

原因是Python默认不支持直接将.ipynb格式文件当作可导入模块,必须先做格式转换或用特殊方式加载。以下是三种可行解决方案:

方法1:用nbconvert转成Python文件(最稳妥)

nbconvert是Jupyter自带工具,可直接把Notebook转成标准.py文件:

  • 执行命令:
jupyter nbconvert --to script MyNotebook.ipynb

执行后会生成MyNotebook.py,原test_add.py的导入语句无需修改,直接运行pytest即可。

方法2:用import_ipynb库直接导入

如果不想转换文件,可通过第三方库直接加载Notebook:

  1. 安装依赖库:
pip install import_ipynb
  1. 修改test_add.py代码,先导入import_ipynb:
import import_ipynb
from MyNotebook import add

def test_add():
    assert add(2, 3) == 5
    assert add(0, 0) == 0
    assert add(-1, 1) == 0

之后运行pytest就能正常导入函数。

方法3:手动解析Notebook(无需额外依赖)

不想安装第三方库的话,可直接读取.ipynb的JSON结构,提取代码执行:
修改test_add.py如下:

import json

# 读取Notebook文件内容
with open('MyNotebook.ipynb', 'r', encoding='utf-8') as f:
    notebook_content = json.load(f)

# 遍历所有代码单元格并执行
for cell in notebook_content['cells']:
    if cell['cell_type'] == 'code':
        code_block = ''.join(cell['source'])
        exec(code_block)

def test_add():
    assert add(2, 3) == 5
    assert add(0, 0) == 0
    assert add(-1, 1) == 0

这样也能直接使用add函数完成测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:52:48