diff --git a/data/extract.py b/data/extract.py
index a40ee5c125be6b4e0d6107ab24cb0831d1c5cf06..eca591cf16e9857218fea1bcf364df3c23fb3213 100644
--- a/data/extract.py
+++ b/data/extract.py
@@ -1,9 +1,21 @@
-from __future__ import print_function
 import sys
-import imp
 import json
+import os
 import distutils.core
 
+if sys.version_info[:2] >= (3, 3):
+  from importlib.machinery import SourceFileLoader
+  def load_source(name, path):
+    if not os.path.exists(path):
+      return {}
+    return vars(SourceFileLoader('mod', path).load_module())
+else:
+  import imp
+  def load_source(name, path):
+    if not os.path.exists(path):
+      return {}
+    return vars(imp.load_source('mod', path))
+
 try:
   import setuptools
 except ImportError:
@@ -21,7 +33,7 @@ except ImportError:
 @mock.patch.object(distutils.core, 'setup')
 def invoke(mock1, mock2):
   # This is setup.py which calls setuptools.setup
-  imp.load_source('_target_setup_', sys.argv[-1])
+  load_source('_target_setup_', sys.argv[-1])
   # called arguments are in `mock_setup.call_args`
   call_args = mock1.call_args or mock2.call_args
   args, kwargs = call_args