mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
Issue #2377: Make importlib the implementation of __import__().
importlib._bootstrap is now frozen into Python/importlib.h and stored as _frozen_importlib in sys.modules. Py_Initialize() loads the frozen code along with sys and imp and then uses _frozen_importlib._install() to set builtins.__import__() w/ _frozen_importlib.__import__().
This commit is contained in:
parent
d2cbd90539
commit
fd0741555b
38 changed files with 3635 additions and 637 deletions
37
Python/freeze_importlib.py
Normal file
37
Python/freeze_importlib.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
#! /usr/bin/env python
|
||||
"""Freeze importlib for use as the implementation of import."""
|
||||
import marshal
|
||||
|
||||
|
||||
header = """/* Auto-generated by Python/freeze_importlib.py */"""
|
||||
|
||||
|
||||
def main(input_path, output_path):
|
||||
with open(input_path, 'r', encoding='utf-8') as input_file:
|
||||
source = input_file.read()
|
||||
|
||||
code = compile(source, '<frozen importlib._bootstrap>', 'exec')
|
||||
|
||||
lines = [header]
|
||||
lines.append('unsigned char _Py_M__importlib[] = {')
|
||||
data = marshal.dumps(code)
|
||||
# Code from Tools/freeze/makefreeze.py:writecode()
|
||||
for i in range(0, len(data), 16):
|
||||
line = [' ']
|
||||
for c in data[i:i+16]:
|
||||
line.append('%d,' % c)
|
||||
lines.append(''.join(line))
|
||||
lines.append('};\n')
|
||||
with open(output_path, 'w') as output_file:
|
||||
output_file.write('\n'.join(lines))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
|
||||
args = sys.argv[1:]
|
||||
if len(args) != 2:
|
||||
print('Need to specify input and output file paths', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
main(*args)
|
Loading…
Add table
Add a link
Reference in a new issue