autodataming的个人博客分享 http://blog.sciencenet.cn/u/autodataming

博文

python反编译软件推荐uncompyle6-Bad magic number in .pyc

已有 9672 次阅读 2019-5-1 15:03 |系统分类:科研笔记

背景

从友方那边获得了pyc文件,但是由于他当时用的是python2.6编译的,而现在python2.6几乎被淘汰掉了,安装了python2.7 等其他版本无法运行该pyc文件,报错 RuntimeError: Bad magic number in .pyc file 。

安装了python 2.6 后,运行该文件不报错,但是依赖模块openbabel,openbabel在python2.6中安装稍微麻烦了一点,也不能直接使用python2.7中openbabel模块。因此尝试反编译pyc文件。


不同版本 python 編譯出的 pyc 不相容

解决方案: 1. 反编译

2. 用对应版本的python 运行。不停尝试多种版本。

https://stackoverflow.com/questions/7807541/is-there-a-way-to-know-by-which-python-version-the-pyc-file-was-compiled

这里总结了不同版本对应的magic number.

You can get the magic number of your Python as follows:

$ python -VPython 2.6.2# python>>> import imp>>> imp.get_magic().encode('hex')'d1f20d0a'

To get the magic number for a pyc file you can do the following:

>>> f = open('test25.pyc')>>> magic = f.read(4)>>> magic.encode('hex')'b3f20d0a'>>> f = open('test26.pyc')>>> magic = f.read(4)>>> magic.encode('hex')'d1f20d0a'




安装

python2764.exe -m pip install uncompyle6

HitProfiler> uncompyle6.exe -h

Usage:
  uncompyle6 [OPTIONS]... [ FILE | DIR]...
  uncompyle6 [--help | -h | --V | --version]

Examples:
  uncompyle6      foo.pyc bar.pyc       # decompile foo.pyc, bar.pyc to stdout
  uncompyle6 -o . foo.pyc bar.pyc       # decompile to ./foo.pyc_dis and ./bar.pyc_dis
  uncompyle6 -o /tmp /usr/lib/python1.5 # decompile whole library

----------------------------------------------------------------------------------------

运行 uncompyle6.exe .\ppi.pyc >ppi.py

获得了ppi.py,

然后用python27 成功运行ppi.py。 问题解决



https://wap.sciencenet.cn/blog-950202-1176563.html

上一篇:pymol增加object的states
下一篇:科学网又出新规定了
收藏 IP: 202.127.19.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-29 02:40

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部