gpt4 book ai didi

python - 如何使用 importlib 重写字节码?

转载 作者:行者123 更新时间:2023-11-28 17:54:04 31 4
gpt4 key购买 nike

我正在寻找一种使用 importlib 的方法在 Python 2.x 中即时重写导入模块的字节码。换句话说,我需要在导入期间在编译和执行步骤之间 Hook 我自己的函数。除此之外,我希望导入功能能够像内置功能一样工作。

我已经用 imputil 做到了,但是那个库并没有涵盖所有情况,而且无论如何都被弃用了。

最佳答案

看过 importlib 源代码后,我相信您可以在 _bootstrap 模块中子类化 PyLoader 并覆盖 get_code :

class PyLoader:
...

def get_code(self, fullname):
"""Get a code object from source."""
source_path = self.source_path(fullname)
if source_path is None:
message = "a source path must exist to load {0}".format(fullname)
raise ImportError(message)
source = self.get_data(source_path)
# Convert to universal newlines.
line_endings = b'\n'
for index, c in enumerate(source):
if c == ord(b'\n'):
break
elif c == ord(b'\r'):
line_endings = b'\r'
try:
if source[index+1] == ord(b'\n'):
line_endings += b'\n'
except IndexError:
pass
break
if line_endings != b'\n':
source = source.replace(line_endings, b'\n')

# modified here
code = compile(source, source_path, 'exec', dont_inherit=True)
return rewrite_code(code)

我假设你知道自己在做什么,但我想代表世界各地的程序员说:ugh =p

关于python - 如何使用 importlib 重写字节码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3769336/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com