[Python-checkins] bpo-45019: Clean up the frozen __hello__ module. (gh-28374)

ericsnowcurrently webhook-mailer at python.org
Wed Sep 15 16:15:45 EDT 2021


https://github.com/python/cpython/commit/3814e2036d96e2b6c69afce61926bb0a2a34d2d9
commit: 3814e2036d96e2b6c69afce61926bb0a2a34d2d9
branch: main
author: Eric Snow <ericsnowcurrently at gmail.com>
committer: ericsnowcurrently <ericsnowcurrently at gmail.com>
date: 2021-09-15T14:15:32-06:00
summary:

bpo-45019: Clean up the frozen __hello__ module. (gh-28374)

Here's one more small cleanup that should have been in PR gh-28319. We eliminate stdout side-effects from importing the frozen __hello__ module, and update tests accordingly. We also move the module's source file into Lib/ from Toos/freeze/flag.py.

https://bugs.python.org/issue45019

files:
A Lib/__hello__.py
A Python/frozen_modules/__hello__.h
D Python/frozen_modules/hello.h
M Lib/ctypes/test/test_values.py
M Lib/test/test_frozen.py
M Lib/test/test_importlib/frozen/test_loader.py
M Makefile.pre.in
M PCbuild/_freeze_module.vcxproj
M PCbuild/_freeze_module.vcxproj.filters
M Python/frozen.c
M Python/frozen_modules/MANIFEST
M Tools/scripts/freeze_modules.py

diff --git a/Lib/__hello__.py b/Lib/__hello__.py
new file mode 100644
index 0000000000000..d37bd2766ac1c
--- /dev/null
+++ b/Lib/__hello__.py
@@ -0,0 +1,7 @@
+initialized = True
+
+def main():
+    print("Hello world!")
+
+if __name__ == '__main__':
+    main()
diff --git a/Lib/ctypes/test/test_values.py b/Lib/ctypes/test/test_values.py
index 4f525cde69e86..96521fd3abce9 100644
--- a/Lib/ctypes/test/test_values.py
+++ b/Lib/ctypes/test/test_values.py
@@ -7,7 +7,7 @@
 import unittest
 import sys
 from ctypes import *
-from test.support import import_helper, captured_stdout
+from test.support import import_helper
 
 import _ctypes_test
 
diff --git a/Lib/test/test_frozen.py b/Lib/test/test_frozen.py
index 52d8f7ced9680..3d212b9202f90 100644
--- a/Lib/test/test_frozen.py
+++ b/Lib/test/test_frozen.py
@@ -21,8 +21,9 @@ def test_frozen(self):
         if name in sys.modules:
             del sys.modules[name]
         with import_helper.frozen_modules():
-            with captured_stdout() as out:
-                import __hello__
+            import __hello__
+        with captured_stdout() as out:
+            __hello__.main()
         self.assertEqual(out.getvalue(), 'Hello world!\n')
 
 
diff --git a/Lib/test/test_importlib/frozen/test_loader.py b/Lib/test/test_importlib/frozen/test_loader.py
index 1b0a56f7e8afa..cfa5e5bb31bea 100644
--- a/Lib/test/test_importlib/frozen/test_loader.py
+++ b/Lib/test/test_importlib/frozen/test_loader.py
@@ -21,12 +21,11 @@ def deprecated():
 def fresh(name, *, oldapi=False):
     with util.uncache(name):
         with import_helper.frozen_modules():
-            with captured_stdout() as stdout:
-                if oldapi:
-                    with deprecated():
-                        yield stdout
-                else:
-                    yield stdout
+            if oldapi:
+                with deprecated():
+                    yield
+            else:
+                yield
 
 
 class ExecModuleTests(abc.LoaderTests):
@@ -44,8 +43,10 @@ def exec_module(self, name):
         module.__spec__ = spec
         assert not hasattr(module, 'initialized')
 
-        with fresh(name) as stdout:
+        with fresh(name):
             self.machinery.FrozenImporter.exec_module(module)
+        with captured_stdout() as stdout:
+            module.main()
 
         self.assertTrue(module.initialized)
         self.assertTrue(hasattr(module, '__spec__'))
@@ -119,8 +120,10 @@ def test_unloadable(self):
 class LoaderTests(abc.LoaderTests):
 
     def load_module(self, name):
-        with fresh(name, oldapi=True) as stdout:
+        with fresh(name, oldapi=True):
             module = self.machinery.FrozenImporter.load_module(name)
+        with captured_stdout() as stdout:
+            module.main()
         return module, stdout
 
     def test_module(self):
@@ -165,15 +168,18 @@ def test_lacking_parent(self):
         self.assertFalse(hasattr(module, '__file__'))
 
     def test_module_reuse(self):
-        with fresh('__hello__', oldapi=True) as stdout:
+        with fresh('__hello__', oldapi=True):
             module1 = self.machinery.FrozenImporter.load_module('__hello__')
             module2 = self.machinery.FrozenImporter.load_module('__hello__')
+        with captured_stdout() as stdout:
+            module1.main()
+            module2.main()
         self.assertIs(module1, module2)
         self.assertEqual(stdout.getvalue(),
                          'Hello world!\nHello world!\n')
 
     def test_module_repr(self):
-        with fresh('__hello__', oldapi=True) as stdout:
+        with fresh('__hello__', oldapi=True):
             module = self.machinery.FrozenImporter.load_module('__hello__')
             repr_str = self.machinery.FrozenImporter.module_repr(module)
         self.assertEqual(repr_str,
@@ -203,11 +209,12 @@ class InspectLoaderTests:
     def test_get_code(self):
         # Make sure that the code object is good.
         name = '__hello__'
+        with import_helper.frozen_modules():
+            code = self.machinery.FrozenImporter.get_code(name)
+            mod = types.ModuleType(name)
+            exec(code, mod.__dict__)
         with captured_stdout() as stdout:
-            with import_helper.frozen_modules():
-                code = self.machinery.FrozenImporter.get_code(name)
-                mod = types.ModuleType(name)
-                exec(code, mod.__dict__)
+            mod.main()
         self.assertTrue(hasattr(mod, 'initialized'))
         self.assertEqual(stdout.getvalue(), 'Hello world!\n')
 
diff --git a/Makefile.pre.in b/Makefile.pre.in
index b2a8f0ecdddfd..3e562d72cfe19 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -783,8 +783,8 @@ Python/frozen_modules/posixpath.h: Programs/_freeze_module Lib/posixpath.py
 Python/frozen_modules/stat.h: Programs/_freeze_module Lib/stat.py
 	$(srcdir)/Programs/_freeze_module stat $(srcdir)/Lib/stat.py $(srcdir)/Python/frozen_modules/stat.h
 
-Python/frozen_modules/hello.h: Programs/_freeze_module Tools/freeze/flag.py
-	$(srcdir)/Programs/_freeze_module hello $(srcdir)/Tools/freeze/flag.py $(srcdir)/Python/frozen_modules/hello.h
+Python/frozen_modules/__hello__.h: Programs/_freeze_module Lib/__hello__.py
+	$(srcdir)/Programs/_freeze_module __hello__ $(srcdir)/Lib/__hello__.py $(srcdir)/Python/frozen_modules/__hello__.h
 
 # END: freezing modules
 
@@ -1030,7 +1030,7 @@ FROZEN_FILES = \
 		$(srcdir)/Python/frozen_modules/ntpath.h \
 		$(srcdir)/Python/frozen_modules/posixpath.h \
 		$(srcdir)/Python/frozen_modules/stat.h \
-		$(srcdir)/Python/frozen_modules/hello.h
+		$(srcdir)/Python/frozen_modules/__hello__.h
 # End FROZEN_FILES
 
 Python/frozen.o: $(FROZEN_FILES)
diff --git a/PCbuild/_freeze_module.vcxproj b/PCbuild/_freeze_module.vcxproj
index a87dca75c34fa..e306884029fb0 100644
--- a/PCbuild/_freeze_module.vcxproj
+++ b/PCbuild/_freeze_module.vcxproj
@@ -245,10 +245,10 @@
       <IntFile>$(IntDir)zipimport.g.h</IntFile>
       <OutFile>$(PySourcePath)Python\frozen_modules\zipimport.h</OutFile>
     </None>
-    <None Include="..\Tools\freeze\flag.py">
-      <ModName>hello</ModName>
-      <IntFile>$(IntDir)hello.g.h</IntFile>
-      <OutFile>$(PySourcePath)Python\frozen_modules\hello.h</OutFile>
+    <None Include="..\Lib\__hello__.py">
+      <ModName>__hello__</ModName>
+      <IntFile>$(IntDir)__hello__.g.h</IntFile>
+      <OutFile>$(PySourcePath)Python\frozen_modules\__hello__.h</OutFile>
     </None>
     <!-- END frozen modules -->
   </ItemGroup>
diff --git a/PCbuild/_freeze_module.vcxproj.filters b/PCbuild/_freeze_module.vcxproj.filters
index bed7920fdba63..6e7c1bba26333 100644
--- a/PCbuild/_freeze_module.vcxproj.filters
+++ b/PCbuild/_freeze_module.vcxproj.filters
@@ -25,7 +25,7 @@
     <None Include="..\Lib\zipimport.py">
       <Filter>Python Files</Filter>
     </None>
-    <None Include="..\Tools\freeze\flag.py">
+    <None Include="..\Lib\__hello__.py">
       <Filter>Python Files</Filter>
     </None>
     <!-- END frozen modules -->
diff --git a/Python/frozen.c b/Python/frozen.c
index eef0f453f6260..cf384d31768eb 100644
--- a/Python/frozen.c
+++ b/Python/frozen.c
@@ -49,7 +49,7 @@
 #include "frozen_modules/ntpath.h"
 #include "frozen_modules/posixpath.h"
 #include "frozen_modules/stat.h"
-#include "frozen_modules/hello.h"
+#include "frozen_modules/__hello__.h"
 /* End includes */
 
 /* Note that a negative size indicates a package. */
@@ -74,9 +74,9 @@ static const struct _frozen _PyImport_FrozenModules[] = {
     {"stat", _Py_M__stat, (int)sizeof(_Py_M__stat)},
 
     /* Test module */
-    {"__hello__", _Py_M__hello, (int)sizeof(_Py_M__hello)},
-    {"__phello__", _Py_M__hello, -(int)sizeof(_Py_M__hello)},
-    {"__phello__.spam", _Py_M__hello, (int)sizeof(_Py_M__hello)},
+    {"__hello__", _Py_M____hello__, (int)sizeof(_Py_M____hello__)},
+    {"__phello__", _Py_M____hello__, -(int)sizeof(_Py_M____hello__)},
+    {"__phello__.spam", _Py_M____hello__, (int)sizeof(_Py_M____hello__)},
     {0, 0, 0} /* sentinel */
 };
 
diff --git a/Python/frozen_modules/MANIFEST b/Python/frozen_modules/MANIFEST
index 811dc5b48e423..b723684dc7201 100644
--- a/Python/frozen_modules/MANIFEST
+++ b/Python/frozen_modules/MANIFEST
@@ -15,6 +15,6 @@ genericpath                  no  <genericpath>                   genericpath.h
 ntpath                       no  <ntpath>                        ntpath.h                        15b9b80fa9c2
 posixpath                    no  <posixpath>                     posixpath.h                     3fc077252afd
 stat                         no  <stat>                          stat.h                          27c32a0815c2
-__hello__                    no  Tools/freeze/flag.py            hello.h                         af6fb665713f
-__phello__                  YES  Tools/freeze/flag.py            hello.h                         af6fb665713f
-__phello__.spam              no  Tools/freeze/flag.py            hello.h                         af6fb665713f
+__hello__                    no  <__hello__>                     __hello__.h                     81ba13956479
+__phello__                  YES  <__hello__>                     __hello__.h                     81ba13956479
+__phello__.spam              no  <__hello__>                     __hello__.h                     81ba13956479
diff --git a/Python/frozen_modules/__hello__.h b/Python/frozen_modules/__hello__.h
new file mode 100644
index 0000000000000..eea102923ebd5
--- /dev/null
+++ b/Python/frozen_modules/__hello__.h
@@ -0,0 +1,25 @@
+/* Auto-generated by Programs/_freeze_module.c */
+const unsigned char _Py_M____hello__[] = {
+    99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+    0,0,0,0,0,115,32,0,0,0,100,0,90,0,100,1,
+    132,0,90,1,101,2,100,2,107,2,114,14,101,1,131,0,
+    1,0,100,3,83,0,100,3,83,0,41,4,84,99,0,0,
+    0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,
+    0,0,115,12,0,0,0,116,0,100,1,131,1,1,0,100,
+    0,83,0,41,2,78,122,12,72,101,108,108,111,32,119,111,
+    114,108,100,33,41,1,218,5,112,114,105,110,116,169,0,243,
+    0,0,0,0,250,18,60,102,114,111,122,101,110,32,95,95,
+    104,101,108,108,111,95,95,62,218,4,109,97,105,110,114,4,
+    0,0,0,3,0,0,0,243,2,0,0,0,12,1,114,5,
+    0,0,0,115,12,0,0,0,5,10,11,25,5,26,5,26,
+    5,26,5,26,114,2,0,0,0,90,8,95,95,109,97,105,
+    110,95,95,78,41,3,90,11,105,110,105,116,105,97,108,105,
+    122,101,100,114,4,0,0,0,218,8,95,95,110,97,109,101,
+    95,95,114,1,0,0,0,114,2,0,0,0,114,3,0,0,
+    0,218,8,60,109,111,100,117,108,101,62,114,7,0,0,0,
+    1,0,0,0,115,10,0,0,0,4,0,6,2,8,3,10,
+    1,4,255,115,8,0,0,0,4,0,6,3,6,2,16,1,
+    115,32,0,0,0,15,19,1,12,1,26,1,26,1,26,4,
+    12,16,26,4,26,1,11,5,9,5,11,5,11,5,11,5,
+    11,1,11,1,11,114,2,0,0,0,
+};
diff --git a/Python/frozen_modules/hello.h b/Python/frozen_modules/hello.h
deleted file mode 100644
index 2658c05886a6d..0000000000000
--- a/Python/frozen_modules/hello.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Auto-generated by Programs/_freeze_module.c */
-const unsigned char _Py_M__hello[] = {
-    99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
-    0,0,0,0,0,115,16,0,0,0,100,0,90,0,101,1,
-    100,1,131,1,1,0,100,2,83,0,41,3,84,122,12,72,
-    101,108,108,111,32,119,111,114,108,100,33,78,41,2,90,11,
-    105,110,105,116,105,97,108,105,122,101,100,218,5,112,114,105,
-    110,116,169,0,243,0,0,0,0,122,14,60,102,114,111,122,
-    101,110,32,104,101,108,108,111,62,218,8,60,109,111,100,117,
-    108,101,62,114,3,0,0,0,1,0,0,0,243,4,0,0,
-    0,4,0,12,1,114,4,0,0,0,115,16,0,0,0,15,
-    19,1,12,1,6,7,21,1,22,1,22,1,22,1,22,114,
-    2,0,0,0,
-};
diff --git a/Tools/scripts/freeze_modules.py b/Tools/scripts/freeze_modules.py
index 044ea095fdcd4..89b66169d832b 100644
--- a/Tools/scripts/freeze_modules.py
+++ b/Tools/scripts/freeze_modules.py
@@ -82,9 +82,9 @@ def find_tool():
         'stat',
         ]),
     ('Test module', [
-        'hello : __hello__ = ' + os.path.join(TOOLS_DIR, 'freeze', 'flag.py'),
-        'hello : <__phello__>',
-        'hello : __phello__.spam',
+        '__hello__',
+        '__hello__ : <__phello__>',
+        '__hello__ : __phello__.spam',
         ]),
 ]
 ESSENTIAL = {
@@ -578,7 +578,7 @@ def regen_pcbuild(modules):
     for src in _iter_sources(modules):
         # For now we only require the essential frozen modules on Windows.
         # See bpo-45186 and bpo-45188.
-        if src.id not in ESSENTIAL and src.id != 'hello':
+        if src.id not in ESSENTIAL and src.id != '__hello__':
             continue
         pyfile = relpath_for_windows_display(src.pyfile, ROOT_DIR)
         header = relpath_for_windows_display(src.frozenfile, ROOT_DIR)



More information about the Python-checkins mailing list