以下代码是线性方程解算器的一部分。它是为python3编写的。在运行程序之前,它将根据期望值检查imp.get_magic()
中的幻数。在
我在运行Fedora25的系统上安装了Python3.5.0。 问题是,在我的系统中,我得到的幻数值不同。在
应为:b'\xf8\x0c\r\n'
相反,我得到:b'\x16\r\r\n'
这是密码
def _get_module():
del globals()['_get_module']
import imp
import base64
import marshal
magic = imp.get_magic()
if magic == b'\xf8\x0c\r\n': # Python 3.5
pycData = <certain value>
pycData = base64.decodebytes(pycData)
因为我得到的幻数值不同,所以我不能运行这个程序。在
此代码来自书籍Coding the Matrix的资源。它可以在“矩阵”部分下找到,文件名为^{
有没有办法让这一切继续下去?在
每次字节码更改时,幻数都会更新,以确保您不会试图将不兼容的字节码向后加载到旧的解释器中。在
代码所寻找的特定魔法标记是python3.5a0的,请参见changelog for markers:
当您尝试使用3.5b2或更高版本(但在3.5.2之前)加载此文件时:
^{pr2}$您可以将该版本加载到3.5.2中;只需禁用magic marker测试或重新编写代码以提取标记(就像我前面所做的,前两个字节)并匹配最大可能值。在
但是,我不确定为什么代码首先不只是分发一个
.pyc
文件。python3.3字节码可以很好地加载到python3.6中。 我已经将所有版本加载到Python3.6中,对每个版本运行dis.dis()
,发现字节码中的没有真正的区别。在相关问题 更多 >
编程相关推荐