mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
This commit is contained in:
parent
0006aacb9d
commit
e67f48ce5e
8 changed files with 806 additions and 697 deletions
|
@ -1,39 +0,0 @@
|
|||
#! /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', encoding='utf-8') as output_file:
|
||||
output_file.write('\n'.join(lines))
|
||||
# Avoid a compiler warning for lack of EOL
|
||||
output_file.write('\n')
|
||||
|
||||
|
||||
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)
|
1281
Python/importlib.h
1281
Python/importlib.h
File diff suppressed because it is too large
Load diff
|
@ -242,7 +242,7 @@ import_init(PyInterpreterState *interp, PyObject *sysmod)
|
|||
|
||||
|
||||
void
|
||||
Py_InitializeEx(int install_sigs)
|
||||
_Py_InitializeEx_Private(int install_sigs, int install_importlib)
|
||||
{
|
||||
PyInterpreterState *interp;
|
||||
PyThreadState *tstate;
|
||||
|
@ -363,6 +363,9 @@ Py_InitializeEx(int install_sigs)
|
|||
/* Initialize _warnings. */
|
||||
_PyWarnings_Init();
|
||||
|
||||
if (!install_importlib)
|
||||
return;
|
||||
|
||||
import_init(interp, sysmod);
|
||||
|
||||
_PyTime_Init();
|
||||
|
@ -392,6 +395,12 @@ Py_InitializeEx(int install_sigs)
|
|||
initsite(); /* Module site */
|
||||
}
|
||||
|
||||
void
|
||||
Py_InitializeEx(int install_sigs)
|
||||
{
|
||||
_Py_InitializeEx_Private(install_sigs, 1);
|
||||
}
|
||||
|
||||
void
|
||||
Py_Initialize(void)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue