Index: Lib/pickle.py =================================================================== --- Lib/pickle.py (revision 66050) +++ Lib/pickle.py (working copy) @@ -33,7 +33,13 @@ import sys import struct import re +from lib2to3.fixes.fix_imports import MAPPING +from collections import defaultdict +COMPAT = defaultdict(list) +for key, val in MAPPING.iteritems(): + COMPAT[val].append(key) + __all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler", "Unpickler", "dump", "dumps", "load", "loads"] @@ -1121,9 +1127,18 @@ def find_class(self, module, name): # Subclasses may override this - __import__(module) - mod = sys.modules[module] - klass = getattr(mod, name) + if module in COMPAT: + for equiv in COMPAT[module]: + __import__(equiv) + sys.modules[module] = sys.modules[equiv] + try: + klass = getattr(sys.modules[equiv], name) + except AttributeError: + continue + else: + __import__(module) + mod = sys.modules[module] + klass = getattr(mod, name) return klass def load_reduce(self):