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

Jupyter导入同目录py脚本函数触发NameError问题排查

问题根因

.py格式的自定义脚本完全可以正常导入到同环境的Jupyter Notebook中,你遇到的NameError: name 'tz' is not defined和跨文件格式的导入能力无关,核心诱因集中在几个高频场景:

  • 修改完toolbox.py后没有保存文件,Python导入时读取的是未定义tz函数的旧版本文件
  • Python内核缓存了历史加载过的同名toolbox模块(比如之前创建过同名空文件、环境其他路径下存在同名toolbox包),没有加载你当前目录下的目标脚本
  • 你执行的!export PYTHONPATH=.命令本身是无效操作:Jupyter中每个!开头的shell命令都运行在独立子shell中,环境变量修改不会作用到当前Notebook的Python内核,不过从你贴的sys.path输出看,脚本所在目录已经在Python搜索路径列表中,这个点不是本次报错的直接原因。
排查与修复步骤

按顺序执行以下操作即可解决问题:

  1. 先确认文件状态:打开toolbox.py,确认def tz(): print('works')的代码已经写入,按Cmd+S(macOS)/Ctrl+S(Windows/Linux)保存文件,这是最容易被忽略的低级错误。
  2. 清空模块缓存,验证实际加载的模块来源,在Notebook中新建代码块运行以下代码:
import sys
# 删掉内核中已缓存的旧toolbox模块
if 'toolbox' in sys.modules:
    del sys.modules['toolbox']

import toolbox
# 打印实际加载的toolbox文件路径,确认是否为目标目录下的文件
print("当前加载的toolbox路径:", toolbox.__file__)
# 打印toolbox模块包含的所有成员,确认tz函数存在
print("toolbox内的成员列表:", dir(toolbox))
  1. 如果打印出的路径不是/Users/justinbenfit/Desktop/Programming/Python/Explorium /transformations_deduping/ipynb/toolbox.py,说明环境中存在其他同名的toolbox模块/包,将其他同名的文件或文件夹重命名即可。
  2. 如果路径正确,但成员列表中没有tz,回到第一步确认toolbox.py已经保存了tz函数的定义。
  3. 验证通过后,再执行函数调用即可正常运行:
from toolbox import *
tz()
# 预期输出:works
  1. 如果以上操作后仍有异常,直接在Notebook菜单栏选择Kernel -> Restart Kernel重启内核,从头运行代码块即可完全清空所有旧模块缓存。
编码建议
  • 尽量避免使用from xxx import *的导入方式,这种写法容易引发命名冲突,且出现问题时很难排查变量/函数来源。优先使用import toolbox后通过toolbox.tz()调用,或者明确写from toolbox import tz导入需要的函数。
  • 后续开发中如果修改了toolbox.py的代码,不需要重启内核也可以通过importlib重载模块拿到最新代码:
import importlib
importlib.reload(toolbox)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:06:28