如何找出 Python 3 中 .pyc 标头的幻数

2024-02-11

Python 字节码 (.pyc) 文件的标头以一个幻数开头,该幻数在 Python 版本之间会发生变化。我如何(以编程方式)找出当前 Python 版本的编号以生成有效的标头?我目前正在对 Python 3.7.1 进行硬编码,但这意味着我现在依赖于特定的 Python 版本。

这个答案 https://stackoverflow.com/a/8628185/149392正是我想要使用的py_compile.MAGIC,但这在 Python 3 中似乎不再存在。我怎样才能在 Python 3 中做同样的事情呢?

这是我正在尝试做的一个例子:

import dis
import marshal

PYC_HEADER = b'\x42\x0d\x0d\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

def f():
    print('Hello World')

with open('test.pyc', 'wb') as pyc:
    pyc.write(PYC_HEADER)
    marshal.dump(dis.Bytecode(f).codeobj, pyc)

这应该创建一个文件test.pyc,然后可以使用与脚本相同的 Python 解释器来运行它,并且应该打印“Hello World!”。确实如此,但仅限于使用 Python 3.7 时。我正在寻找一种为用于运行脚本的 Python 3 版本生成标头的方法,而不是硬编码 3.7。

对于上下文:

我正在将一种简单的编程语言编译为不同的字节码格式(LLVM、Java 字节码、Web Assembly 和现在的 Python 字节码),作为编译器构建计划教程系列的一部分。

我可以使用生成Python字节码字节流库 https://github.com/zachariahreed/byteasm,这给了我一个结果函数。但为了将内容写入.pyc文件,我需要一个有效的标题。通过对标头进行硬编码,只有当学习本教程的人员运行与我相同版本的 Python 3 (3.7) 时,代码才会起作用,否则他们必须手动找出其版本的幻数。


从 Python 3.4 开始,有importlib.util.MAGIC_NUMBER https://docs.python.org/3/library/importlib.html#importlib.util.MAGIC_NUMBER在模块中importlib:

>>> import importlib
>>> importlib.util.MAGIC_NUMBER.hex()
'420d0d0a'

Python get_magic的方法imp module.

>>> import imp
>>> imp.get_magic().hex()
'420d0d0a'

请注意,虽然这在 Python 3.7 中仍然有效,但自 Python 3.4 起已被弃用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找出 Python 3 中 .pyc 标头的幻数 的相关文章

  • 将 numpy 数组写入文本文件的速度

    我需要将一个非常 高 的两列数组写入文本文件 而且速度非常慢 我发现如果我将数组改造成更宽的数组 写入速度会快得多 例如 import time import numpy as np dataMat1 np random rand 1000
  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • 更改 Altair 中的构面标题位置?

    如何将方面标题 在本例中为年份 移动到每个图的上方 默认值似乎位于图表的一侧 这可以轻易改变吗 import altair as alt from vega datasets import data df data seattle weat
  • 登录网站并使用 python 请求下载文件

    我有一个带有 HTML 表单的网站 登录后 它会将我带到 start php 站点 然后将我重定向到overview php 我想从该服务器下载文件 当我单击 ZIP 文件的下载链接时 链接后面的地址是 getimage php path
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • PyMC3-自定义 theano Op 进行数值积分

    我使用 PyMC3 进行参数估计 使用必须定义的特定似然函数 我用谷歌搜索了一下 发现我应该使用densitydist实现用户定义的似然函数的方法 但它不起作用 如何在 PyMC3 中合并用户定义的似然函数并找出最大 aposteriori
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • 如何使用 sys.path.append 在 Python 中导入文件?

    我的桌面上有两个目录 DIR1 and DIR2其中包含以下文件 DIR1 file1 py DIR2 file2 py myfile txt 这些文件包含以下内容 file1 py import sys sys path append s
  • Pandas style.bar 颜色基于条件?

    如何渲染其中一列的 Pandas dfstyle bar color属性是根据某些条件计算的 Example df style bar subset before after color ff781c vmin 0 0 vmax 1 0 而
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 无法在 python 3.8 上将带有 webapp 的 python 部署到 azure

    我正在尝试使用部署一个测试项目Flask使用以下方法将框架迁移到 Azure 云中Azure CLI https learn microsoft com en us azure app service containers quicksta
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • Django 模型:如何使用 mixin 类来覆盖 django 模型以实现 save 等功能

    我想在每次保存模型之前验证值 所以 我必须重写保存函数 代码几乎是一样的 我想把它写在 mixin 类中 但失败了 我不知道如何写 super func 我英语不好 抱歉 class SyncableMixin object def sav
  • 如何为所有用户安装 Anaconda python?

    Anaconda python 发行版 https store continuum io cshop anaconda 非常方便地部署科学计算环境 SCE 并根据需要切换python版本 默认情况下 安装会将 python 定位到 anac
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010

随机推荐

  • 如何从 TFS 控制下的项目中删除空文件夹?

    假设我有一个项目 MyLib 在该项目下 我创建了一个文件夹 例如Folder1 该文件夹下没有文件 该项目已连接到 TFS 然后我想删除这个文件夹Folder1 我从上下文菜单中删除了它 并将项目签入 TFS 然后我使用 Team Exp
  • 传递给函数的原始变量名? [复制]

    这个问题在这里已经有答案了 可能的重复 PHP 获取作为参数传递的变量的名称 https stackoverflow com questions 2379166 php get name of variable passed as argu
  • 服务层是否应该接受来自控制器的 DTO 或自定义请求对象?

    正如标题所示 设计服务层时的最佳实践是什么 我确实理解服务层应该始终返回 DTO 以便域 实体 对象保留在服务层中 但是控制器向服务层的输入应该是什么 下面我提出三点我自己的建议 方法一 在此方法中 域对象 Item 保留在服务层内 cla
  • PowerMock 测试通过然后失败

    为什么我的单元测试在独立运行时通过 但在运行多个测试时失败 当我执行单个单元测试时 我的测试将成功模拟并返回预期结果 但是 当我运行所有单元测试时 我之前通过的测试将失败 一次试运行 shouldDoThisAgain 通过 多次测试运行
  • Linq:GroupBy、Sum 和 Count

    我有一系列产品 public class Product public Product public string ProductCode get set public decimal Price get set public string
  • 在Java中生成数百万个不重复的随机数

    我有一个问题 我可以使用什么算法在Java中生成一组2 21随机唯一数字 java中除了math random之外还有另一个生成随机数的库吗 提前致谢 关键问题是你所说的 数字 是什么意思 一般来说 这个问题可以通过 生成一个数字列表 将其
  • 将整个文件夹从 Windows 移动到 Android 模拟器

    是否可以将整个文件夹按原样从 Windows 移动到 Android 模拟器 我确信这个问题的答案存在于某处 但我无法找到它 我可以通过 adb 命令行或通过 ddms 一次移动一个文件 但都没有给我提供移动包含多个文件夹和文件的整个文件夹
  • 表单标签可以包含正文标签吗?

    今天我遇到一些代码 在正文标签开始之前有一个表单标签 我的意思是 表单标签包含在正文标签中 这可能吗 如果是的话 它有什么帮助呢
  • 如何使用 Unix 变量在会话 {bash} 中设置和保留值 [重复]

    这个问题在这里已经有答案了 我需要做这样的事情 设置一个带有默认值的 unix 变量 运行一个 shell 脚本来读取该变量并对其进行处理 处理后可能会也可能不会改变该变量的值 每小时运行此脚本并确保此变量现在的值是上次运行此脚本时设置的值
  • 使用 PHP 获取/读取 Javascript cookie

    我有一个理论问题 我知道你可以使用 javascript 获取 读取 PHP cookie 文档 cookie PHP 中有类似的方法吗 PHP 可以获取 读取在 JavaScript 中创建的 cookie 吗 如果是 那么你怎么能这样做
  • 为什么 ENUM 在 MySQL 中不存储多个值?

    我想用ENUM表中的特征使用MySQL 我创建了一个表tbl test having id作为主键和enum col字段为ENUM数据类型 CREATE TABLE tbl test id INT NOT NULL AUTO INCREME
  • 具有相同工作空间的 2 个 Eclipse 版本

    目前 我的系统上正在运行 Eclipse Ganymede 我想安装 Eclipse Indigo 并将其连接到同一工作区 然后删除 Eclipse Ganymede 这可以正常工作还是我应该重新创建所有项目 理论上它应该有效 在实践中 我
  • Spring Cloud Sleuth 与 OpenTracing

    有没有办法将 Spring Cloud Sleuth 与 OpenTracing 结合使用 我想将 Spring 客户端与 Jaeger 连接 Spring Sleuth 现在与 OpenTracing 兼容 您所要做的就是在类路径中使用
  • 使用 preRemove/postRemove 事件来获取哪些查询可以执行,哪些不能执行

    我在脑海中思考这个问题有一段时间了 现在我需要一些关于 preRemove postRemove 事件的建议 因为我将执行的查询基本上是DELETE但这也应该适用于 prePersist postPersist 和 preUpdate po
  • 我如何了解如何在 jQuery AJAX 应用程序中启用后退按钮?

    我查看了这里所有最热门的问题 包括引用最流行插件 如 BBQ 和 jQuery Address 的问题 然而 我缺少一些东西 我需要从我在这些项目中看到的任何事情中退一步进行指导 他们假设了一些我显然不具备的基本知识 并且我无法推断出示例中
  • 尝试在android中写入只读数据库

    当尝试更新值时 会发生这些错误 02 09 11 37 53 573 ERROR AndroidRuntime 4809 android database sqlite SQLiteException attempt to write a
  • Matplotlib - 财务量叠加

    我正在制作一个包含两个数据集的烛台图 开盘价 最高价 最低价 收盘价 和交易量 我试图将交易量叠加在图表底部 如下所示 我正在打电话卷 覆盖3 http doc astro wise org matplotlib finance html
  • 带有大量参数的Sql存储过程

    我正在使用 Sql Server 2008 我的存储过程接受近 150 个参数 性能方面有什么问题吗 当您使用 SQL Server 2008 时 您可以使用新的 Table 参数 如果参数相同 可以轻松使用表参数 这是链接到MSDN ht
  • Android - 当删除部分 ImageSpan 时删除整个 ImageSpan?

    我通过插入 ImageSpan 将图像添加到我的编辑文本中 我对跨度没有透彻的了解 但似乎我的 ImageSpan 需要包装一部分文本 因此 我向 EditText 添加一些文本 并用 ImageSpan 包裹它 看起来不错 但是 当我退格
  • 如何找出 Python 3 中 .pyc 标头的幻数

    Python 字节码 pyc 文件的标头以一个幻数开头 该幻数在 Python 版本之间会发生变化 我如何 以编程方式 找出当前 Python 版本的编号以生成有效的标头 我目前正在对 Python 3 7 1 进行硬编码 但这意味着我现在