python3.5.0提供了一个意想不到的魔力麻木

2024-09-30 16:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码是线性方程解算器的一部分。它是为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的资源。它可以在“矩阵”部分下找到,文件名为^{}(直接下载文件)。在

有没有办法让这一切继续下去?在


Tags: 代码import程序get系统magicpython3数值
1条回答
网友
1楼 · 发布于 2024-09-30 16:26:10

每次字节码更改时,幻数都会更新,以确保您不会试图将不兼容的字节码向后加载到旧的解释器中。在

代码所寻找的特定魔法标记是python3.5a0的,请参见changelog for markers

>>> int.from_bytes(b'\xf8\x0c', 'little')
3320

当您尝试使用3.5b2或更高版本(但在3.5.2之前)加载此文件时:

^{pr2}$

您可以将该版本加载到3.5.2中;只需禁用magic marker测试或重新编写代码以提取标记(就像我前面所做的,前两个字节)并匹配最大可能值。在

但是,我不确定为什么代码首先不只是分发一个.pyc文件。python3.3字节码可以很好地加载到python3.6中。 我已经将所有版本加载到Python3.6中,对每个版本运行dis.dis(),发现字节码中的没有真正的区别。在

相关问题 更多 >