diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 710e84d..46e715a 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -198,7 +198,7 @@
     LT_10_5 = bool(getDeptargetTuple() < (10, 5))
 
 #   Disable for now
-    if False:   # if (getDeptargetTuple() > (10, 5)) and (getVersionTuple() >= (3, 5)):
+    if False:   # if getDeptargetTuple() > (10, 5):
         result.extend([
           dict(
               name="Tcl 8.5.15",
@@ -239,7 +239,7 @@
                 ),
         ])
 
-    if getVersionTuple() >= (3, 3):
+    if PYTHON_3:
         result.extend([
           dict(
               name="XZ 5.0.5",
@@ -369,8 +369,6 @@
 # Instructions for building packages inside the .mpkg.
 def pkg_recipes():
     unselected_for_python3 = ('selected', 'unselected')[PYTHON_3]
-    # unselected if 3.0 through 3.3, selected otherwise (2.x or >= 3.4)
-    unselected_for_lt_python34 = ('selected', 'unselected')[(3, 0) <= getVersionTuple() < (3, 4)]
     result = [
         dict(
             name="PythonFramework",
@@ -439,27 +437,23 @@
             topdir="/Library/Frameworks/Python.framework",
             source="/empty-dir",
             required=False,
-            selected=unselected_for_lt_python34,
+            selected='selected',
+        ),
+        dict(
+            name="PythonInstallPip",
+            long_name="Install or upgrade pip",
+            readme="""\
+                This package installs (or upgrades from an earlier version)
+                pip, a tool for installing and managing Python packages.
+                """,
+            postflight="scripts/postflight.ensurepip",
+            topdir="/Library/Frameworks/Python.framework",
+            source="/empty-dir",
+            required=False,
+            selected='selected',
         ),
     ]
 
-    if getVersionTuple() >= (3, 4):
-        result.append(
-            dict(
-                name="PythonInstallPip",
-                long_name="Install or upgrade pip",
-                readme="""\
-                    This package installs (or upgrades from an earlier version)
-                    pip, a tool for installing and managing Python packages.
-                    """,
-                postflight="scripts/postflight.ensurepip",
-                topdir="/Library/Frameworks/Python.framework",
-                source="/empty-dir",
-                required=False,
-                selected='selected',
-            )
-        )
-
     if getDeptargetTuple() < (10, 4) and not PYTHON_3:
         result.append(
             dict(
@@ -977,7 +971,7 @@
         shellQuote(os.path.join(SRCDIR, 'configure')), shellQuote(SDKPATH),
         UNIVERSALARCHS,
         (' ', '--with-computed-gotos ')[PYTHON_3],
-        (' ', '--without-ensurepip ')[getVersionTuple() >= (3, 4)],
+        (' ', '--without-ensurepip ')[PYTHON_3],
         shellQuote(WORKDIR)[1:-1],
         shellQuote(WORKDIR)[1:-1]))
 
@@ -1159,7 +1153,9 @@
     fp.close()
 
 def patchScript(inPath, outPath):
+    major, minor = getVersionMajorMinor()
     data = fileContents(inPath)
+    data = data.replace('@PYMAJOR@', str(major))
     data = data.replace('@PYVER@', getVersion())
     fp = open(outPath, 'w')
     fp.write(data)
diff --git a/Mac/BuildScript/scripts/postflight.ensurepip b/Mac/BuildScript/scripts/postflight.ensurepip
new file mode 100755
index 0000000..bf893d1
--- /dev/null
+++ b/Mac/BuildScript/scripts/postflight.ensurepip
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Install/upgrade pip.
+#
+
+PYVER="@PYVER@"
+PYMAJOR="@PYMAJOR@"
+FWK="/Library/Frameworks/Python.framework/Versions/${PYVER}"
+RELFWKBIN="../../..${FWK}/bin"
+
+umask 022
+
+"${FWK}/bin/python${PYVER}" -m ensurepip --upgrade
+
+"${FWK}/bin/python${PYVER}" -Wi \
+    "${FWK}/lib/python${PYVER}/compileall.py" \
+    -f -x badsyntax \
+    "${FWK}/lib/python${PYVER}/site-packages"
+
+"${FWK}/bin/python${PYVER}" -Wi -O \
+    "${FWK}/lib/python${PYVER}/compileall.py" \
+    -f -x badsyntax \
+    "${FWK}/lib/python${PYVER}/site-packages"
+
+chgrp -R admin "${FWK}/lib/python${PYVER}/site-packages" "${FWK}/bin"
+chmod -R g+w "${FWK}/lib/python${PYVER}/site-packages" "${FWK}/bin"
+
+# We do not know if the user selected the Python command-line tools
+# package that installs symlinks to /usr/local/bin.  So we assume
+# that the command-line tools package has already completed or was
+# not selected and we will only install /usr/local/bin symlinks for
+# pip et al if there are /usr/local/bin/python* symlinks to our
+# framework bin directory.
+
+if [ -d /usr/local/bin ] ; then
+    (
+        install_links_if_our_fw() {
+            if [ "$(readlink -n ./$1)" = "${RELFWKBIN}/$1" ] ; then
+                shift
+                for fn ;
+                do
+                    if [ -e "${RELFWKBIN}/${fn}" ] ; then
+                        rm -f ./${fn}
+                        ln -s "${RELFWKBIN}/${fn}" "./${fn}"
+                        chgrp -h admin "./${fn}"
+                        chmod -h g+w "./${fn}"
+                    fi
+                done
+            fi
+        }
+
+        cd /usr/local/bin
+
+        # Create pipx.y and easy_install-x.y links if /usr/local/bin/pythonx.y
+        #   is linked to this framework version
+        install_links_if_our_fw "python${PYVER}" \
+                                    "pip${PYVER}" "easy_install-${PYVER}"
+
+        # Create pipx link if /usr/local/bin/pythonx is linked to this version
+        install_links_if_our_fw "python${PYMAJOR}" \
+                                    "pip${PYMAJOR}"
+
+        # Create pip and easy_install link if /usr/local/bin/python
+        #   is linked to this version
+        install_links_if_our_fw "python" \
+                                    "pip" "easy_install"
+    )
+fi
+exit 0
diff --git a/Misc/NEWS b/Misc/NEWS
index 47c688c..aed73d0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -324,6 +324,8 @@
 
 - Issue #17219: Add library build dir for Python extension cross-builds.
 
+- Issue #22877: PEP 477 - OS X installer now installs pip.
+
 Windows
 -------
 
