是否有可能从.py文件生成的.pyc文件中获取一些信息?
当前回答
如果你需要反编译pyc,但是已经安装了python 3.9,你可以强制uncompyle6运行。这并不完美,但确实有效。只需编辑site-packages\uncompyle6\bin\uncompile.py即可
def main_bin():
if not (sys.version_info[0:2] in ((2, 6), (2, 7), (3, 0),
(3, 1), (3, 2), (3, 3),
(3, 4), (3, 5), (3, 6),
(3, 7), (3, 8), (3, 9)
只需要将您已经安装的版本以与其他版本相同的格式添加并保存即可。它至少可以运行。
其他回答
是的,你可以在pypi上找到unpyclib。
$ pip install unpyclib
然后你可以反编译你的.pyc文件
$ python -m unpyclib.application -Dq path/to/file.pyc
您可以尝试Easy Python反编译器。它基于decompyle++和Uncompyle2。 它支持python 1.0-3.3版本的反编译
注意:我是上述工具的作者。
decompyle++ (pycdc)是唯一适合我的:https://github.com/zrax/pycdc
在Decompile Python 2.7 .pyc
安装使用 PIP安装pycompyle6
pycompyle6 filename.pyc
可以尝试的工具
Uncompyle6适用于Python 3,但存在一些bug。X,并且在2.7中运行良好。
推荐的开始选项,因为它的目标是统一早期的分支,并专注于自动化的单元测试。uncompyle6 GitHub页面有更多详细信息。 最适合早3。X版本,不是3.7+的最佳选择
如果这不起作用,尝试decompyle3, Uncompyle6的一个分支,在3.7或更高版本中工作得更好(根据Uncompyle6的作者)。
如果仍然有问题,请检查uncompyle6和decompyle3 readme,它们链接到其他可能更适合您的代码的工具。
限制
你可以得到你的代码,包括变量名和文档字符串,但没有注释。
一些代码可能无法成功反编译,特别是使用不寻常的控制流,或者最新的Python 3。x版本。这是由于这些反编译器中的错误,Python随着时间的推移改变了它的字节码。
改进这些工具
如果需要,为这些项目提出GitHub问题——两者都在一系列Python版本上运行单元测试套件。
资金显然是支持uncomple6和decompyle3中最新的Python版本(3.7以后)的限制-发送捐款将有所帮助。
防止将来丢失代码
请看这个答案,了解一些可能在你的编辑器或IDE中工作的技巧,包括VS Code和PyCharm。
推荐文章
- 数据类vs类型。NamedTuple主要用例
- 如何从macOS完全卸载蟒蛇
- 是否有可能键入提示一个lambda函数?
- 'dict'对象没有has_key属性
- 使用Pandas groupby连接来自几行的字符串
- Pandas:给定列的数据帧行之和
- 如何避免在为Python项目构建Docker映像时重新安装包?
- 如何激活蟒蛇环境
- 省略[…]意思是在一个列表里?
- 为什么我得到“'str'对象没有属性'读取'”当尝试使用' json。载入字符串?
- 不区分大小写的列表排序,没有降低结果?
- 排序后的语法(key=lambda:…)
- 在烧瓶中返回HTTP状态代码201
- 使用python创建一个简单的XML文件
- APT命令行界面式的yes/no输入?