Line profiler运行%lprun -f仅显示数值不显示行内容如何解决
问题现象
使用line_profiler的%lprun -f命令时,工具可正常输出运行统计数据,但仅显示统计数值、不展示对应行的代码内容,抛出如下目录相关错误提示:
Timer unit: 1e-07 s Total time: 0.962042 s Could not find file C:\Users\my name\AppData\Local\Temp\ipykernel_20788\3519952779.py Are you sure you are running this program from the same directory that you ran the profiler from? Continuing without the function's contents. Line # Hits Time Per Hit % Time Line Contents ============================================================== 1 2 1 24.0 24.0 0.0 3 6 211.0 35.2 0.0
运行%lprun?查询工具路径,返回结果为c:\users\my name\anaconda3\lib\site-packages\line_profiler\ipython_extension.py。
问题原因
该问题是旧版本line_profiler的兼容bug导致:
- 对Windows下带空格的路径(比如示例路径里的
my name用户目录)解析存在错误,无法正确读取IPython/Jupyter生成的临时单元格代码文件 - 对Jupyter内核生成的临时py文件的路径识别逻辑存在缺陷,无法关联到内存中定义的单元格函数对应代码
问题和工具安装位置、程序运行目录没有直接关系。
已验证无效的方案
- 在代码所在同级目录重新安装line_profiler
- 尝试将
ipython_extension.py复制到代码目录,无法定位到AppData文件夹 - 将代码保存为.py格式文件后重新运行程序
可行解决方案
- 直接升级line_profiler到最新版本,旧版本存在的Windows带空格路径解析错误、Jupyter临时文件识别缺陷均已在新版本修复,执行命令完成升级:
升级后彻底关闭Jupyter内核,重启服务后再运行pip install --upgrade line_profiler%lprun即可正常展示每行代码内容。 - 若升级后问题仍存在,不要在Jupyter单元格内直接定义待分析函数:将需要做性能分析的函数写入本地磁盘可正常访问的
.py文件,在notebook中通过import语句导入目标函数后,再调用%lprun执行分析,工具可直接读取对应py文件的代码,不会触发文件找不到的报错。
内容的提问来源于stack exchange,提问作者Jaya
相关产品推荐
相关产品推荐

