找回 Jupyter/Python 加载至内存中的源代码

本文参考另一篇博客
但这篇文章里 Python 及各种库版本都较老,对于 Python3 文章里的命令大都不再适用了,且是针对更普遍的 python 程序的,本文主要讨论 jupyter 中的内存代码恢复。

起因是这样的,一个 Jupyter notebook 中 import 了自己的 module A.py 中的几个函数,后来一直在 jupyter 中工作,kernel 也没重启过,但回过头来突然发现 A.py 中的内容被我不小心用其他内容覆盖了。。考虑到 kernel 没有重启,现在代码其实还加载在内存中,于是开始想办法恢复。

首先安装必要的工具

pip install uncompyle6

这个 package 用于对 python 代码字节流进行反编译,但似乎是只有 CLI 没有 api 的,需要浏览源码找到反编译函数。
在 kernel 加载了待恢复代码的 Jupyter notebook 中运行

import uncompyle6
uncompyle6.main.decompile(3.8, target_function.__code__, sys.stdout)

即可显示反编译得到的代码结果,其中 target_function 是待恢复的函数,3.8 是 python 版本。

针对类或模块代码的恢复类似,可以参考文章开头给出的另一篇博客链接。对于非 ipython 或 jupyter 的 python 程序,则需要使用额外的工具,也可以参考这篇博客。

posted @ 2020-12-17 20:07  Glowming  阅读(403)  评论(0编辑  收藏  举报