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

运行memory_profiler时触发np未定义NameError问题咨询

报错原因
  • Python每个模块的命名空间是完全独立的。你在Jupyter交互单元格里写的import numpy as np,仅在当前交互环境的全局作用域生效,不会自动同步到你单独写的hs.py模块里。你最初版本的hs.py全文件没有任何numpy导入语句,函数内部直接调用np.array()自然会触发np未定义的错误,这个问题和是否使用memory_profiler做内存分析无关,哪怕直接在notebook里调用这个函数,一样会报相同的NameError。
  • 你尝试在函数内部加import numpy as np之后仍然报错,核心原因是Python的模块导入缓存机制:第一次执行from hs import get_ph时,Python会把旧版本(无numpy导入)的hs模块缓存到sys.modules中,后续你修改了hs.py的代码,如果不主动重载模块,当前运行环境里调用的始终是第一次导入的旧版函数,自然还是找不到np标识符。
  • 额外说明:%mprun魔法命令执行分析时,会构造独立的执行上下文运行被分析代码,不会主动把交互环境里的全局变量、导入的包注入到外部模块的作用域中,不要依赖交互环境的导入给外部模块补依赖。
  • 你提到移除numpy数组转换逻辑后代码可以正常运行,本质是这版函数代码里完全没有用到np这个标识符,自然不会触发名称查找失败的错误。
解决步骤
  • 规范写法是在hs.py文件最顶部统一导入依赖,不要把导入语句写在函数内部,也不要依赖外部环境的导入。正确的hs.py内容如下:
import numpy as np

def get_ph(hs, ps, dp):
    hs_np = np.array(hs)
    ps_np = np.array(ps)
    dsh = hs_np[ps_np == dp]
    return dsh
  • 修改完hs.py代码后,必须重载模块才能让修改生效,不需要重启内核的话可以用importlib手动重载:
import importlib
import hs
importlib.reload(hs)
from hs import get_ph
  • 重载完成后再执行%mprun相关的内存分析命令即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:21:20