报错内容:KeyError:'3.11.0' (这个是我自己的Python版本号)
主要原因就是你的Python版本没在它库文件支持的版本里,我们需要进行手动添加即可。
首先找到文件:magics.py
我的是在这个路径下:D:\Python\Lib\site-packages\xdis
(每个人Python安装位置不一样,不过后面子文件夹应该是一样的)
打开之后使用快捷键 Ctrl+F 进行关键字搜索:add_canonic_versions
结果有很多,我们定位到最后一个结果的位置,如下图:
将自己的Python版本号添加进去,中间使用空格隔开,修改后如下图:
注意:
修改好之后Ctrl+S保存
尝试使用命令 uncompyle6
依旧报错:
Error: uncompyle6 requires Python 2.6-3.8
我们还需要修改另一个文件:uncompile.py
它的路径大概在:D:\Python\Lib\site-packages\uncompyle6\bin
打开之后,同样检索关键字:main_bin
进行添加,我的Python版本是3.11(同样需要注意空格的使用,格式与它一致)
添加后如下图:
接下来再次尝试使用命令 uncompyle6
可以看到没有出现报错,而是提示我们需要输入用于反编译的文件
这里随便用一个正确的pyc文件进行测试:
(注意 > 的前后都需要有空格隔开)
可以看到反编译成功,pyc文件被成功反编译为py源码。
至此,我们解决了uncompyle6反编译报错KeyError的问题。
这篇文章可以帮助你解决 KeyError:'你的Python版本号' 的报错,解决报错之后你可以正常的进行正确的pyc文件的反编译。
但是我在反编译自己生成的pyc文件中遇到了另一个报错:
ImportError: Unknown magic number 3495 in test.pyc
这是因为pyc文件生成时,头部的magic number被清理,需要我们另外补上。
但是这个搞起来似乎有点麻烦,我们首先需要找到或者计算自己版本号对应的Magic Number,再对自己的pyc文件进行修复,Python3.3 - Python3.7(包含3.3)版本中,只需要Magic Number和八位时间戳+大小信息,Python3.3 以下的版本中,只有Magic Number和四位时间戳,在Python3.7及以上版本的编译后二进制文件中,头部除了四字节Magic Number,还有四个字节的空位和八个字节的时间戳+大小信息,不过对文件反编译没有影响,但是也需要全部填充为0。
关于这个问题的相关解决方法我将放在下一篇博客,也是在Python专栏,欢迎大家来参考!