diff --git a/Makefile.pre.in b/Makefile.pre.in
index 7c3c046f711a5d..3cb799207ca0b4 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -749,6 +749,10 @@ FROZEN_FILES_IN = \
Lib/zipimport.py \
Lib/abc.py \
Lib/codecs.py \
+ Lib/encodings/__init__.py \
+ Lib/encodings/aliases.py \
+ Lib/encodings/ascii.py \
+ Lib/encodings/utf_8.py \
Lib/io.py \
Lib/_collections_abc.py \
Lib/_sitebuiltins.py \
@@ -771,6 +775,10 @@ FROZEN_FILES_OUT = \
Python/frozen_modules/zipimport.h \
Python/frozen_modules/abc.h \
Python/frozen_modules/codecs.h \
+ Python/frozen_modules/encodings.h \
+ Python/frozen_modules/encodings.aliases.h \
+ Python/frozen_modules/encodings.ascii.h \
+ Python/frozen_modules/encodings.utf_8.h \
Python/frozen_modules/io.h \
Python/frozen_modules/_collections_abc.h \
Python/frozen_modules/_sitebuiltins.h \
@@ -810,6 +818,18 @@ Python/frozen_modules/abc.h: Programs/_freeze_module Lib/abc.py
Python/frozen_modules/codecs.h: Programs/_freeze_module Lib/codecs.py
Programs/_freeze_module codecs $(srcdir)/Lib/codecs.py $(srcdir)/Python/frozen_modules/codecs.h
+Python/frozen_modules/encodings.h: Programs/_freeze_module Lib/encodings/__init__.py
+ Programs/_freeze_module encodings $(srcdir)/Lib/encodings/__init__.py $(srcdir)/Python/frozen_modules/encodings.h
+
+Python/frozen_modules/encodings.aliases.h: Programs/_freeze_module Lib/encodings/aliases.py
+ Programs/_freeze_module encodings.aliases $(srcdir)/Lib/encodings/aliases.py $(srcdir)/Python/frozen_modules/encodings.aliases.h
+
+Python/frozen_modules/encodings.ascii.h: Programs/_freeze_module Lib/encodings/ascii.py
+ Programs/_freeze_module encodings.ascii $(srcdir)/Lib/encodings/ascii.py $(srcdir)/Python/frozen_modules/encodings.ascii.h
+
+Python/frozen_modules/encodings.utf_8.h: Programs/_freeze_module Lib/encodings/utf_8.py
+ Programs/_freeze_module encodings.utf_8 $(srcdir)/Lib/encodings/utf_8.py $(srcdir)/Python/frozen_modules/encodings.utf_8.h
+
Python/frozen_modules/io.h: Programs/_freeze_module Lib/io.py
Programs/_freeze_module io $(srcdir)/Lib/io.py $(srcdir)/Python/frozen_modules/io.h
diff --git a/PCbuild/_freeze_module.vcxproj b/PCbuild/_freeze_module.vcxproj
index 12bdde2af84d9a..82504ff71d4e1f 100644
--- a/PCbuild/_freeze_module.vcxproj
+++ b/PCbuild/_freeze_module.vcxproj
@@ -255,6 +255,26 @@
$(IntDir)codecs.g.h
$(PySourcePath)Python\frozen_modules\codecs.h
+
+ encodings
+ $(IntDir)encodings.g.h
+ $(PySourcePath)Python\frozen_modules\encodings.h
+
+
+ encodings.aliases
+ $(IntDir)encodings.aliases.g.h
+ $(PySourcePath)Python\frozen_modules\encodings.aliases.h
+
+
+ encodings.ascii
+ $(IntDir)encodings.ascii.g.h
+ $(PySourcePath)Python\frozen_modules\encodings.ascii.h
+
+
+ encodings.utf_8
+ $(IntDir)encodings.utf_8.g.h
+ $(PySourcePath)Python\frozen_modules\encodings.utf_8.h
+
io
$(IntDir)io.g.h
diff --git a/PCbuild/_freeze_module.vcxproj.filters b/PCbuild/_freeze_module.vcxproj.filters
index 5894909e0fbe1e..9d152524f2fc0d 100644
--- a/PCbuild/_freeze_module.vcxproj.filters
+++ b/PCbuild/_freeze_module.vcxproj.filters
@@ -31,6 +31,18 @@
Python Files
+
+ Python Files
+
+
+ Python Files
+
+
+ Python Files
+
+
+ Python Files
+
Python Files
diff --git a/Python/frozen.c b/Python/frozen.c
index 15baa97b9d0553..6078cbae26284e 100644
--- a/Python/frozen.c
+++ b/Python/frozen.c
@@ -44,6 +44,10 @@
#include "frozen_modules/zipimport.h"
#include "frozen_modules/abc.h"
#include "frozen_modules/codecs.h"
+#include "frozen_modules/encodings.h"
+#include "frozen_modules/encodings.aliases.h"
+#include "frozen_modules/encodings.ascii.h"
+#include "frozen_modules/encodings.utf_8.h"
#include "frozen_modules/io.h"
#include "frozen_modules/_collections_abc.h"
#include "frozen_modules/_sitebuiltins.h"
@@ -75,6 +79,13 @@ static const struct _frozen stdlib_modules[] = {
/* stdlib - startup, without site (python -S) */
{"abc", _Py_M__abc, (int)sizeof(_Py_M__abc)},
{"codecs", _Py_M__codecs, (int)sizeof(_Py_M__codecs)},
+ {"encodings", _Py_M__encodings, -(int)sizeof(_Py_M__encodings)},
+ {"encodings.aliases", _Py_M__encodings_aliases,
+ (int)sizeof(_Py_M__encodings_aliases)},
+ {"encodings.ascii", _Py_M__encodings_ascii,
+ (int)sizeof(_Py_M__encodings_ascii)},
+ {"encodings.utf_8", _Py_M__encodings_utf_8,
+ (int)sizeof(_Py_M__encodings_utf_8)},
{"io", _Py_M__io, (int)sizeof(_Py_M__io)},
/* stdlib - startup, with site */
diff --git a/Tools/scripts/freeze_modules.py b/Tools/scripts/freeze_modules.py
index 36142625ca6090..72e2e48dceaca4 100644
--- a/Tools/scripts/freeze_modules.py
+++ b/Tools/scripts/freeze_modules.py
@@ -76,10 +76,10 @@ def find_tool():
('stdlib - startup, without site (python -S)', [
'abc',
'codecs',
- # For now we do not freeze the encodings, due # to the noise all
- # those extra modules add to the text printed during the build.
- # (See https://github.com/python/cpython/pull/28398#pullrequestreview-756856469.)
- #'',
+ '',
+ 'encodings.aliases',
+ 'encodings.ascii',
+ 'encodings.utf_8',
'io',
]),
('stdlib - startup, with site', [