Rolled setuptools support back into setup.py but made it much more robust.
diff --git a/setup.py b/setup.py
index 16355e2..538c1e0 100644
--- a/setup.py
+++ b/setup.py
@@ -17,10 +17,14 @@
 Also installs included versions of third party libraries, if those libraries
 are not already installed.
 """
-
 import setup_utils
 
-# Modules, not packages, that might need to be installed.
+has_setuptools = False
+try:
+  from setuptools import setup
+  has_setuptools = True
+except ImportError:
+  from distutils.core import setup
 
 packages = [
   'apiclient',
@@ -32,29 +36,41 @@
   'apiclient.contrib.moderator',
   'uritemplate',
 ]
+
+install_requires = []
 py_modules = []
 
-third_party_packages = ['httplib2', 'oauth2']
-third_party_modules = ['gflags', 'gflags_validators']
 
-# Don't clobber installed versions of third party libraries
-# with what we include.
-packages.extend(setup_utils.get_missing_requirements(third_party_packages))
-py_modules.extend(setup_utils.get_missing_requirements(third_party_modules))
+# (module to test for, install_requires to add if missing, packages to add if missing, py_modules to add if missing)
+REQUIREMENTS = [
+  ('httplib2', 'httplib2', 'httplib2', None),
+  ('oauth2', 'oauth2', 'oauth2', None),
+  ('gflags', 'python-gflags', None, ['gflags', 'gflags_validators']),
+  (['json', 'simplejson', 'django.utils'], 'simplejson', 'simplejson', None)
+]
 
-# It appears setuptools can't have packages and py_modules, but this project does.
-from distutils.core import setup
+for import_name, requires, package, modules in REQUIREMENTS:
+  if setup_utils.is_missing(import_name):
+    if has_setuptools:
+      install_requires.append(requires)
+    else:
+      if package is not None:
+        packages.append(package)
+      else:
+        py_modules.extend(modules)
+
 
 long_desc = """The Google API Client for Python is a client library for
 accessing the Buzz, Moderator, and Latitude APIs."""
 
 setup(name="google-api-python-client",
-      version="1.0alpha9",
+      version="1.0alpha10",
       description="Google API Client Library for Python",
       long_description=long_desc,
       author="Joe Gregorio",
       author_email="jcgregorio@google.com",
       url="http://code.google.com/p/google-api-python-client/",
+      install_requires=install_requires,
       packages=packages,
       py_modules=py_modules,
       package_data={
diff --git a/setup_utils.py b/setup_utils.py
index 79ee051..cc8b1c9 100644
--- a/setup_utils.py
+++ b/setup_utils.py
@@ -17,11 +17,13 @@
 
 __author__ = 'tom.h.miller@gmail.com (Tom Miller)'
 
+import sys
 
-def get_missing_requirements(third_party_reqs):
-  """Return a list of missing third party packages."""
-  import sys
 
+def is_missing(packages):
+  """Return True if a package can't be imported."""
+
+  retval = True
   sys_path_original = sys.path[:]
   # Remove the current directory from the list of paths to check when
   # importing modules.
@@ -34,55 +36,17 @@
       sys.path.remove(os.path.abspath(os.path.curdir))
     except ValueError:
       pass
-  missing_pkgs = []
-  for pkg in third_party_reqs:
+  if not isinstance(packages, type([])):
+    packages = [packages]
+  for name in packages:
     try:
-      __import__(pkg)
+      __import__(name)
+      retval = False
     except ImportError:
-      missing_pkgs.append(pkg)
-  # JSON support gets its own special logic
-  try:
-    import_json(sys.path)
-  except ImportError:
-    missing_pkgs.append('simplejson')
+      retval = True
+    if retval == False:
+      break
 
   sys.path = sys_path_original
-  return missing_pkgs
 
-
-def import_json(import_path=None):
-  """Return a package that will provide JSON support.
-
-  Args:
-    import_path: list Value to assing to sys.path before checking for packages.
-                 Default None for default sys.path.
-  Return:
-    A package, one of 'json' (if running python 2.6),
-                      'django.utils.simplejson' (if django is installed)
-                      'simplejson' (if third party library simplejson is found)
-  Raises:
-    ImportError if none of those packages are found.
-  """
-  import sys
-  sys_path_orig = sys.path[:]
-  if import_path is not None:
-    sys.path = import_path
-
-  try:
-    # Should work for Python 2.6.
-    pkg = __import__('json')
-  except ImportError:
-    try:
-      pkg = __import__('django.utils').simplejson
-    except ImportError:
-      try:
-        pkg = __import__('simplejson')
-      except ImportError:
-        pkg = None
-
-  if import_path is not None:
-    sys.path = sys_path_orig
-  if pkg:
-    return pkg
-  else:
-    raise ImportError('Cannot find json support')
+  return retval