10000 freeze site again, never return frozen modules when PYTHONPATH is given · oracle/graalpython@8bf72ff · GitHub
[go: up one dir, main page]

Skip to content

Commit 8bf72ff

Browse files
committed
freeze site again, never return frozen modules when PYTHONPATH is given
1 parent 1332399 commit 8bf72ff

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed

graalpython/com.oracle.graal.python.frozen/freeze_modules.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,7 @@
7171
# We must explicitly mark os.path as a frozen module
7272
("ntpath" if os.name == "nt" else "posixpath") + " : os.path",
7373
"os",
74-
# TODO: freeze site when we upgrade to Python 3.9+ where the stdlib
75-
# and setuptools can deal with a frozen site module
76-
# "site",
74+
"site",
7775
"stat",
7876
],
7977
),

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -842,9 +842,12 @@ private void initializeJavaCore() {
842842
builtinsModule = builtinModules.get(BuiltinNames.BUILTINS);
843843
}
844844

845+
private static final String IMPORTLIB_NAME = "_frozen_importlib";
846+
private static final String IMPORTLIB_EXTERNAL_NAME = "_frozen_importlib_external";
847+
845848
private void initializeImportlib() {
846-
String importlibName = "_frozen_importlib";
847-
PythonModule bootstrap = ImpModuleBuiltins.importFrozenModuleObject(this, importlibName, false);
849+
PythonModule bootstrap = ImpModuleBuiltins.importFrozenModuleObject(this, IMPORTLIB_NAME, false);
850+
PythonModule bootstrapExternal;
848851

849852
PyObjectCallMethodObjArgs callNode = PyObjectCallMethodObjArgs.getUncached();
850853
WriteAttributeToDynamicObjectNode writeNode = WriteAttributeToDynamicObjectNode.getUncached();
@@ -856,18 +859,21 @@ private void initializeImportlib() {
856859

857860
if (bootstrap == null) {
858861
// true when the frozen module is not available
859-
PythonModule bootstrapExternal = createModule("importlib._bootstrap_external");
860-
writeNode.execute(bootstrapExternal, __PACKAGE__, "importlib");
861-
setItem.execute(null, sysModules, "_frozen_importlib_external", bootstrapExternal);
862+
bootstrapExternal = createModule("importlib._bootstrap_external");
862863
bootstrap = createModule("importlib._bootstrap");
863-
writeNode.execute(bootstrap, __PACKAGE__, "importlib");
864-
setItem.execute(null, sysModules, importlibName, bootstrap);
865864
loadFile("importlib/_bootstrap_external", getContext().getStdlibHome(), bootstrapExternal);
866865
loadFile("importlib/_bootstrap", getContext().getStdlibHome(), bootstrap);
867866
} else {
868-
setItem.execute(null, sysModules, importlibName, bootstrap);
869-
LOGGER.log(Level.FINE, () -> "import '_frozen_importlib' # <frozen>");
867+
bootstrapExternal = ImpModuleBuiltins.importFrozenModuleObject(this, IMPORTLIB_EXTERNAL_NAME, true);
868+
LOGGER.log(Level.FINE, () -> "import '" + IMPORTLIB_NAME + "' # <frozen>");
869+
LOGGER.log(Level.FINE, () -> "import '" + IMPORTLIB_EXTERNAL_NAME + "' # <frozen>");
870870
}
871+
setItem.execute(null, sysModules, IMPORTLIB_NAME, bootstrap);
872+
setItem.execute(null, sysModules, IMPORTLIB_EXTERNAL_NAME, bootstrapExternal);
873+
874+
// __package__ needs to be set and doesn't get set by _bootstrap setup
875+
writeNode.execute(bootstrap, __PACKAGE__, "importlib");
876+
writeNode.execute(bootstrapExternal, __PACKAGE__, "importlib");
871877

872878
callNode.execute(null, bootstrap, "_install", getSysModule(), lookupBuiltinModule("_imp"));
873879
writeNode.execute(getBuiltins(), "__import__", readNode.execute(bootstrap, "__import__"));
@@ -878,12 +884,6 @@ private void initializeImportlib() {
878884
PythonBuiltinClass moduleType = lookupType(PythonBuiltinClassType.PythonModule);
879885
writeNode.execute(moduleType, __REPR__, readNode.execute(bootstrap, "_module_repr"));
880886
SpecialMethodSlot.reinitializeSpecialMethodSlots(moduleType, getLanguage());
881-
882-
// __package__ needs to be set and doesn't get set by _bootstrap setup
883-
writeNode.execute(bootstrap, __PACKAGE__, "importlib");
884-
885-
PythonModule bootstrapExternal = (PythonModule) getSysModules().getItem("_frozen_importlib_external");
886-
writeNode.execute(bootstrapExternal, __PACKAGE__, "importlib");
887887
}
888888

889889
private void initializePython3Core(String coreHome) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ImpModuleBuiltins.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,9 @@ protected ArgumentClinicProvider getArgumentClinic() {
465465

466466
@Specialization
467467
boolean run(String name) {
468-
return findFrozen(name).status == FROZEN_OKAY;
468+
// if PYTHONPATH is set, it is prepended to the sys.path on startup and thus might
469+
// override any frozen modules from the stdlib
470+
return getContext().getOption(PythonOptions.PythonPath).isEmpty() && findFrozen(name).status == FROZEN_OKAY;
469471
}
470472
}
471473

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/module/FrozenModules.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ private static final class Map {
195195
private static final PythonFrozenModule NTPATH = new PythonFrozenModule("NTPATH", "ntpath", false);
196196
private static final PythonFrozenModule POSIXPATH = new PythonFrozenModule("POSIXPATH", "posixpath", false);
197197
private static final PythonFrozenModule OS = new PythonFrozenModule("OS", "os", false);
198+
private static final PythonFrozenModule SITE = new PythonFrozenModule("SITE", "site", false);
198199
private static final PythonFrozenModule STAT = new PythonFrozenModule("STAT", "stat", false);
199200
private static final PythonFrozenModule __HELLO__ = new PythonFrozenModule("__HELLO__", "__hello__", false);
200201
private static final PythonFrozenModule FROZEN_ONLY = new PythonFrozenModule("FROZEN_ONLY", "frozen_only", false);
@@ -527,6 +528,8 @@ public static final PythonFrozenModule lookup(String name) {
527528
return Map.POSIXPATH;
528529
case "os":
529530
return Map.OS;
531+
case "site":
532+
return Map.SITE;
530533
case "stat":
531534
return Map.STAT;
532535
case "__hello__":

0 commit comments

Comments
 (0)
0