diff --git a/lib/py/setup.py b/lib/py/setup.py
index 066483e..2a170a4 100644
--- a/lib/py/setup.py
+++ b/lib/py/setup.py
@@ -97,8 +97,6 @@
         extensions = dict()
 
     ssl_deps = []
-    if sys.version_info[0] == 2:
-        ssl_deps.append('ipaddress')
     if sys.hexversion < 0x03050000:
         ssl_deps.append('backports.ssl_match_hostname>=3.5')
     tornado_deps = ['tornado>=4.0']
diff --git a/lib/py/src/TRecursive.py b/lib/py/src/TRecursive.py
index abf202c..aed696a 100644
--- a/lib/py/src/TRecursive.py
+++ b/lib/py/src/TRecursive.py
@@ -10,11 +10,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
-
 from thrift.Thrift import TType
 
 TYPE_IDX = 1
diff --git a/lib/py/src/TTornado.py b/lib/py/src/TTornado.py
index 5eff11d..c409e09 100644
--- a/lib/py/src/TTornado.py
+++ b/lib/py/src/TTornado.py
@@ -17,7 +17,6 @@
 # under the License.
 #
 
-from __future__ import absolute_import
 import logging
 import socket
 import struct
@@ -34,7 +33,7 @@
 logger = logging.getLogger(__name__)
 
 
-class _Lock(object):
+class _Lock:
     def __init__(self):
         self._waiters = deque()
 
diff --git a/lib/py/src/compat.py b/lib/py/src/compat.py
index 0e8271d..3b3d57f 100644
--- a/lib/py/src/compat.py
+++ b/lib/py/src/compat.py
@@ -17,30 +17,13 @@
 # under the License.
 #
 
-import sys
+from io import BytesIO as BufferIO  # noqa
 
-if sys.version_info[0] == 2:
+def binary_to_str(bin_val):
+    return bin_val.decode('utf8')
 
-    from cStringIO import StringIO as BufferIO
+def str_to_binary(str_val):
+    return bytes(str_val, 'utf8')
 
-    def binary_to_str(bin_val):
-        return bin_val
-
-    def str_to_binary(str_val):
-        return str_val
-
-    def byte_index(bytes_val, i):
-        return ord(bytes_val[i])
-
-else:
-
-    from io import BytesIO as BufferIO  # noqa
-
-    def binary_to_str(bin_val):
-        return bin_val.decode('utf8')
-
-    def str_to_binary(str_val):
-        return bytes(str_val, 'utf8')
-
-    def byte_index(bytes_val, i):
-        return bytes_val[i]
+def byte_index(bytes_val, i):
+    return bytes_val[i]
diff --git a/lib/py/src/protocol/TJSONProtocol.py b/lib/py/src/protocol/TJSONProtocol.py
index 1741702..fef0cc9 100644
--- a/lib/py/src/protocol/TJSONProtocol.py
+++ b/lib/py/src/protocol/TJSONProtocol.py
@@ -263,19 +263,11 @@
 
     def _toChar(self, high, low=None):
         if not low:
-            if sys.version_info[0] == 2:
-                return ("\\u%04x" % high).decode('unicode-escape') \
-                                         .encode('utf-8')
-            else:
-                return chr(high)
+            return chr(high)
         else:
             codepoint = (1 << 16) + ((high & 0x3ff) << 10)
             codepoint += low & 0x3ff
-            if sys.version_info[0] == 2:
-                s = "\\U%08x" % codepoint
-                return s.decode('unicode-escape').encode('utf-8')
-            else:
-                return chr(codepoint)
+            return chr(codepoint)
 
     def readJSONString(self, skipContext):
         highSurrogate = None
@@ -317,7 +309,7 @@
             elif character in ESCAPE_CHAR_VALS:
                 raise TProtocolException(TProtocolException.INVALID_DATA,
                                          "Unescaped control char")
-            elif sys.version_info[0] > 2:
+            else:
                 utf8_bytes = bytearray([ord(character)])
                 while ord(self.reader.peek()) >= 0x80:
                     utf8_bytes.append(ord(self.reader.read()))
diff --git a/lib/py/src/protocol/TProtocol.py b/lib/py/src/protocol/TProtocol.py
index bac54ae..ec71ab3 100644
--- a/lib/py/src/protocol/TProtocol.py
+++ b/lib/py/src/protocol/TProtocol.py
@@ -261,11 +261,6 @@
                 raise TProtocolException(type=TProtocolException.INVALID_DATA,
                                          message='Invalid binary field type %d' % ttype)
             return ('readBinary', 'writeBinary', False)
-        if sys.version_info[0] == 2 and spec == 'UTF8':
-            if ttype != TType.STRING:
-                raise TProtocolException(type=TProtocolException.INVALID_DATA,
-                                         message='Invalid string field type %d' % ttype)
-            return ('readUtf8', 'writeUtf8', False)
         return self._TTYPE_HANDLERS[ttype] if ttype < len(self._TTYPE_HANDLERS) else (None, None, False)
 
     def _read_by_ttype(self, ttype, spec, espec):
diff --git a/lib/py/src/transport/TTransport.py b/lib/py/src/transport/TTransport.py
index ff20d7e..a686b12 100644
--- a/lib/py/src/transport/TTransport.py
+++ b/lib/py/src/transport/TTransport.py
@@ -17,9 +17,10 @@
 # under the License.
 #
 
+from io import BytesIO as BufferIO
+
 from struct import pack, unpack
 from thrift.Thrift import TException
-from ..compat import BufferIO
 
 
 class TTransportException(TException):
diff --git a/lib/py/src/transport/TZlibTransport.py b/lib/py/src/transport/TZlibTransport.py
index e848579..8b08297 100644
--- a/lib/py/src/transport/TZlibTransport.py
+++ b/lib/py/src/transport/TZlibTransport.py
@@ -22,13 +22,12 @@
 data compression.
 """
 
-from __future__ import division
 import zlib
 from .TTransport import TTransportBase, CReadableTransport
 from ..compat import BufferIO
 
 
-class TZlibTransportFactory(object):
+class TZlibTransportFactory:
     """Factory transport that builds zlib compressed transports.
 
     This factory caches the last single client/transport that it was passed
diff --git a/lib/py/test/thrift_json.py b/lib/py/test/thrift_json.py
index 125ea59..5a491e2 100644
--- a/lib/py/test/thrift_json.py
+++ b/lib/py/test/thrift_json.py
@@ -42,8 +42,6 @@
         transport = TTransport.TBufferedTransportFactory().getTransport(buf)
         protocol = TJSONProtocol(transport)
 
-        if sys.version_info[0] == 2:
-            unicode_text = unicode_text.encode('utf8')
         self.assertEqual(protocol.readString(), unicode_text)
 
     def test_TJSONProtocol_write(self):
