diff --git a/bleach/_vendor/html5lib/_inputstream.py b/bleach/_vendor/html5lib/_inputstream.py
index 0207dd21..09762517 100644
--- a/bleach/_vendor/html5lib/_inputstream.py
+++ b/bleach/_vendor/html5lib/_inputstream.py
@@ -1,7 +1,7 @@
from __future__ import absolute_import, division, unicode_literals
-from six import text_type
-from six.moves import http_client, urllib
+from bleach.six_shim import text_type
+from bleach.six_shim import http_client, urllib
import codecs
import re
diff --git a/bleach/_vendor/html5lib/_tokenizer.py b/bleach/_vendor/html5lib/_tokenizer.py
index 4748a197..d8848016 100644
--- a/bleach/_vendor/html5lib/_tokenizer.py
+++ b/bleach/_vendor/html5lib/_tokenizer.py
@@ -1,6 +1,6 @@
from __future__ import absolute_import, division, unicode_literals
-from six import unichr as chr
+from bleach.six_shim import unichr as chr
from collections import deque, OrderedDict
from sys import version_info
diff --git a/bleach/_vendor/html5lib/_trie/py.py b/bleach/_vendor/html5lib/_trie/py.py
index c2ba3da7..56f66bd5 100644
--- a/bleach/_vendor/html5lib/_trie/py.py
+++ b/bleach/_vendor/html5lib/_trie/py.py
@@ -1,5 +1,5 @@
from __future__ import absolute_import, division, unicode_literals
-from six import text_type
+from bleach.six_shim import text_type
from bisect import bisect_left
diff --git a/bleach/_vendor/html5lib/_utils.py b/bleach/_vendor/html5lib/_utils.py
index 9ea57942..635bb024 100644
--- a/bleach/_vendor/html5lib/_utils.py
+++ b/bleach/_vendor/html5lib/_utils.py
@@ -7,7 +7,7 @@
except ImportError:
from collections import Mapping
-from six import text_type, PY3
+from bleach.six_shim import text_type, PY3
if PY3:
import xml.etree.ElementTree as default_etree
diff --git a/bleach/_vendor/html5lib/filters/lint.py b/bleach/_vendor/html5lib/filters/lint.py
index acd4d7a2..1340d972 100644
--- a/bleach/_vendor/html5lib/filters/lint.py
+++ b/bleach/_vendor/html5lib/filters/lint.py
@@ -1,6 +1,6 @@
from __future__ import absolute_import, division, unicode_literals
-from six import text_type
+from bleach.six_shim import text_type
from . import base
from ..constants import namespaces, voidElements
diff --git a/bleach/_vendor/html5lib/filters/sanitizer.py b/bleach/_vendor/html5lib/filters/sanitizer.py
index 70ef9066..5c31e974 100644
--- a/bleach/_vendor/html5lib/filters/sanitizer.py
+++ b/bleach/_vendor/html5lib/filters/sanitizer.py
@@ -12,7 +12,7 @@
import warnings
from xml.sax.saxutils import escape, unescape
-from six.moves import urllib_parse as urlparse
+from bleach.six_shim import urllib_parse as urlparse
from . import base
from ..constants import namespaces, prefixes
diff --git a/bleach/_vendor/html5lib/html5parser.py b/bleach/_vendor/html5lib/html5parser.py
index 74d829d9..5427b7dd 100644
--- a/bleach/_vendor/html5lib/html5parser.py
+++ b/bleach/_vendor/html5lib/html5parser.py
@@ -1,5 +1,5 @@
from __future__ import absolute_import, division, unicode_literals
-from six import with_metaclass, viewkeys
+from bleach.six_shim import viewkeys
import types
@@ -423,7 +423,7 @@ def getMetaclass(use_metaclass, metaclass_func):
return type
# pylint:disable=unused-argument
- class Phase(with_metaclass(getMetaclass(debug, log))):
+ class Phase(metaclass=getMetaclass(debug, log)):
"""Base class for helper object that implements each phase of processing
"""
__slots__ = ("parser", "tree", "__startTagCache", "__endTagCache")
diff --git a/bleach/_vendor/html5lib/serializer.py b/bleach/_vendor/html5lib/serializer.py
index c66df683..5666f49a 100644
--- a/bleach/_vendor/html5lib/serializer.py
+++ b/bleach/_vendor/html5lib/serializer.py
@@ -1,5 +1,5 @@
from __future__ import absolute_import, division, unicode_literals
-from six import text_type
+from bleach.six_shim import text_type
import re
diff --git a/bleach/_vendor/html5lib/treebuilders/base.py b/bleach/_vendor/html5lib/treebuilders/base.py
index e4a3d710..2869da00 100644
--- a/bleach/_vendor/html5lib/treebuilders/base.py
+++ b/bleach/_vendor/html5lib/treebuilders/base.py
@@ -1,5 +1,5 @@
from __future__ import absolute_import, division, unicode_literals
-from six import text_type
+from bleach.six_shim import text_type
from ..constants import scopingElements, tableInsertModeElements, namespaces
diff --git a/bleach/_vendor/html5lib/treebuilders/etree.py b/bleach/_vendor/html5lib/treebuilders/etree.py
index 086bed4e..5ccfc4d6 100644
--- a/bleach/_vendor/html5lib/treebuilders/etree.py
+++ b/bleach/_vendor/html5lib/treebuilders/etree.py
@@ -1,7 +1,7 @@
from __future__ import absolute_import, division, unicode_literals
# pylint:disable=protected-access
-from six import text_type
+from bleach.six_shim import text_type
import re
diff --git a/bleach/_vendor/html5lib/treebuilders/etree_lxml.py b/bleach/_vendor/html5lib/treebuilders/etree_lxml.py
index e73de61a..f4622322 100644
--- a/bleach/_vendor/html5lib/treebuilders/etree_lxml.py
+++ b/bleach/_vendor/html5lib/treebuilders/etree_lxml.py
@@ -28,7 +28,7 @@
from .. import _ihatexml
import lxml.etree as etree
-from six import PY3, binary_type
+from bleach.six_shim import PY3, binary_type
fullTree = True
diff --git a/bleach/_vendor/html5lib/treewalkers/etree.py b/bleach/_vendor/html5lib/treewalkers/etree.py
index 44653372..a9d9450c 100644
--- a/bleach/_vendor/html5lib/treewalkers/etree.py
+++ b/bleach/_vendor/html5lib/treewalkers/etree.py
@@ -3,7 +3,7 @@
from collections import OrderedDict
import re
-from six import string_types
+from bleach.six_shim import string_types
from . import base
from .._utils import moduleFactoryFactory
diff --git a/bleach/_vendor/html5lib/treewalkers/etree_lxml.py b/bleach/_vendor/html5lib/treewalkers/etree_lxml.py
index a614ac5b..ef42163b 100644
--- a/bleach/_vendor/html5lib/treewalkers/etree_lxml.py
+++ b/bleach/_vendor/html5lib/treewalkers/etree_lxml.py
@@ -1,5 +1,5 @@
from __future__ import absolute_import, division, unicode_literals
-from six import text_type
+from bleach.six_shim import text_type
from collections import OrderedDict
diff --git a/bleach/_vendor/vendor_install.sh b/bleach/_vendor/vendor_install.sh
index 6e61c348..6c896ee4 100755
--- a/bleach/_vendor/vendor_install.sh
+++ b/bleach/_vendor/vendor_install.sh
@@ -7,8 +7,12 @@ set -o pipefail
BLEACH_VENDOR_DIR=${BLEACH_VENDOR_DIR:-"."}
DEST=${DEST:-"."}
+# Install with no dependencies
pip install --no-binary all --no-compile --no-deps -r "${BLEACH_VENDOR_DIR}/vendor.txt" --target "${DEST}"
+# Apply patches
+(cd "${DEST}" && patch -p2 < 01_html5lib_six.patch)
+
# install Python 3.6.14 urllib.urlparse for #536
curl --proto '=https' --tlsv1.2 -o "${DEST}/parse.py" https://raw.githubusercontent.com/python/cpython/v3.6.14/Lib/urllib/parse.py
(cd "${DEST}" && sha256sum parse.py > parse.py.SHA256SUM)
diff --git a/scripts/vendor_verify.sh b/scripts/vendor_verify.sh
index 6a0fe317..96764051 100755
--- a/scripts/vendor_verify.sh
+++ b/scripts/vendor_verify.sh
@@ -17,6 +17,9 @@ mkdir "${DEST}"
# Get versions of pip and python
pip --version
+# Copy patch files to dest directory
+cp bleach/_vendor/*.patch "${DEST}"
+
# Install vendored dependencies into temp directory
BLEACH_VENDOR_DIR=bleach/_vendor DEST="${DEST}" bleach/_vendor/vendor_install.sh