--- pkg_resources.py
+++ pkg_resources.py
@@ -209,9 +209,10 @@
     needs some hacks for Linux and Mac OS X.
     """
     try:
-        from distutils.util import get_platform
-    except ImportError:
+        # Python 2.7 or >=3.2
         from sysconfig import get_platform
+    except ImportError:
+        from distutils.util import get_platform
 
     plat = get_platform()
     if sys.platform == "darwin" and not plat.startswith('macosx-'):
--- setuptools/command/bdist_egg.py
+++ setuptools/command/bdist_egg.py
@@ -7,10 +7,14 @@
 from setuptools import Command
 from distutils.dir_util import remove_tree, mkpath
 try:
-    from distutils.sysconfig import get_python_version, get_python_lib
+    # Python 2.7 or >=3.2
+    from sysconfig import get_path, get_python_version
+    def _get_purelib():
+        return get_path("purelib")
 except ImportError:
-    from sysconfig import get_python_version
-    from distutils.sysconfig import get_python_lib
+    from distutils.sysconfig import get_python_version, get_python_lib
+    def _get_purelib():
+        return get_python_lib(False)
 
 from distutils import log
 from distutils.errors import DistutilsSetupError
@@ -130,7 +134,7 @@
         # Hack for packages that install data to install's --install-lib
         self.get_finalized_command('install').install_lib = self.bdist_dir
 
-        site_packages = os.path.normcase(os.path.realpath(get_python_lib()))
+        site_packages = os.path.normcase(os.path.realpath(_get_purelib()))
         old, self.distribution.data_files = self.distribution.data_files,[]
 
         for item in old:
--- setuptools/command/build_ext.py
+++ setuptools/command/build_ext.py
@@ -9,9 +9,14 @@
 from distutils.file_util import copy_file
 from setuptools.extension import Library
 from distutils.ccompiler import new_compiler
-from distutils.sysconfig import customize_compiler, get_config_var
-get_config_var("LDSHARED")  # make sure _config_vars is initialized
-from distutils.sysconfig import _config_vars
+try:
+    # Python 2.7 or >=3.2
+    from distutils.ccompiler import customize_compiler
+    from sysconfig import get_config_var, _CONFIG_VARS
+except ImportError:
+    from distutils.sysconfig import customize_compiler, get_config_var
+    get_config_var("LDSHARED")  # make sure _config_vars is initialized
+    from distutils.sysconfig import _config_vars as _CONFIG_VARS
 from distutils import log
 from distutils.errors import *
 
@@ -133,16 +138,16 @@
             compiler=self.compiler, dry_run=self.dry_run, force=self.force
         )
         if sys.platform == "darwin":
-            tmp = _config_vars.copy()
+            tmp = _CONFIG_VARS.copy()
             try:
                 # XXX Help!  I don't have any idea whether these are right...
-                _config_vars['LDSHARED'] = "gcc -Wl,-x -dynamiclib -undefined dynamic_lookup"
-                _config_vars['CCSHARED'] = " -dynamiclib"
-                _config_vars['SO'] = ".dylib"
+                _CONFIG_VARS['LDSHARED'] = "gcc -Wl,-x -dynamiclib -undefined dynamic_lookup"
+                _CONFIG_VARS['CCSHARED'] = " -dynamiclib"
+                _CONFIG_VARS['SO'] = ".dylib"
                 customize_compiler(compiler)
             finally:
-                _config_vars.clear()
-                _config_vars.update(tmp)
+                _CONFIG_VARS.clear()
+                _CONFIG_VARS.update(tmp)
         else:
             customize_compiler(compiler)
 
--- setuptools/command/easy_install.py
+++ setuptools/command/easy_install.py
@@ -15,8 +15,21 @@
 from setuptools import Command, _dont_write_bytecode
 from setuptools.sandbox import run_setup
 from distutils import log, dir_util
+try:
+    # Python 2.7 or >=3.2
+    from sysconfig import get_config_vars, get_path
+    def _get_platlib():
+        return get_path("platlib")
+    def _get_purelib():
+        return get_path("purelib")
+except ImportError:
+    from distutils.sysconfig import get_config_vars, get_python_lib
+    def _get_platlib():
+        return get_python_lib(True)
+    def _get_purelib():
+        return get_python_lib(False)
+
 from distutils.util import convert_path, subst_vars
-from distutils.sysconfig import get_python_lib, get_config_vars
 from distutils.errors import DistutilsArgError, DistutilsOptionError, \
     DistutilsError, DistutilsPlatformError
 from distutils.command.install import INSTALL_SCHEMES, SCHEME_KEYS
@@ -1344,8 +1357,7 @@
                                          'Python',
                                          sys.version[:3],
                                          'site-packages'))
-    for plat_specific in (0,1):
-        site_lib = get_python_lib(plat_specific)
+    for site_lib in (_get_purelib(), _get_platlib()):
         if site_lib not in sitedirs: sitedirs.append(site_lib)
 
     if sys.version >= "2.6":
