Modified README and setup.py to install apiclient and included third party libraries.
Added setup_utils.py to test for installed modules.
diff --git a/README b/README
index 43e4611..5a5efe4 100644
--- a/README
+++ b/README
@@ -4,12 +4,27 @@
 Installation
 ============
 
-None. 
+To install, simply say
 
-For the time being the required libraries
-are checked into this directory to make 
-developement easier, so you can just run
-this directly after checking out.
+   $ python setup.py install --record=files.txt
+
+to install the files and record what files are installed in files.txt.
+
+If you want to do a "mock install" and simply extend your PYTHONPATH
+for the current shell to include this folder and the packages in it, do
+
+   $ source setpath.sh
+
+from the root of the project directory.
+
+
+Uninstall
+=========
+
+   $ cat files.txt | xargs rm -rf
+
+You may need root privileges to do this.
+
 
 Running
 =======
@@ -26,6 +41,9 @@
 
    $ python samples/cmdline/buzz.py
 
+After following the install directions (using setup.py or setpath.sh) you
+should be able to cd to samples/cmdline and run the code from there.
+
 
 Third Party Libraries
 ====================
@@ -33,4 +51,3 @@
 http://code.google.com/p/httplib2
 http://code.google.com/p/uri-templates
 http://github.com/simplegeo/python-oauth2
-
diff --git a/setup.py b/setup.py
index e13b99b..2234acf 100644
--- a/setup.py
+++ b/setup.py
@@ -1,16 +1,62 @@
-#!/usr/bin/env python
-from distutils.core import setup
+# Copyright (C) 2010 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
 
-# First pass at a setup.py, in the long run we will
-# need two, one for a version of the library that just
-# includes apiclient, and another that also includes 
-# all of the dependencies.
+"""Setup script for Google API Python client.
+
+Also installs included versions of third party libraries, if those libraries
+are not already installed.
+"""
+
+import setup_utils
+
+packages = ['apiclient', 'uritemplate']
+
+# Don't clobber installed versions of third party libraries
+# with what we include.
+packages.extend(setup_utils.get_missing_requirements())
+print 'Installing the following packages: '
+print str(packages)[1:-1]
+
+try:
+  # Some people prefer setuptools, and may have that installed
+  from setuptools import setup
+except ImportError:
+  from distutils.core import setup
+  print 'Loaded distutils.core'
+else:
+  print 'Loaded setuptools'
+
+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="0.1",
       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/",
-      py_modules = ['apiclient', 'oauth2', 'simplejson', 'uritemplate'],
-      license = "Apache 2.0",
-      keywords="google api client")
+      packages=packages,
+      package_data={'apiclient':['contrib/buzz/future.json',
+                                 'contrib/latitude/future.json',
+                                 'contrib/moderator/future.json']},
+      license="Apache 2.0",
+      keywords="google api client",
+      classifiers=['Development Status :: 3 - Alpha',
+                   'Intended Audience :: Developers',
+                   'License :: OSI Approved :: Apache Software License',
+                   'Operating System :: POSIX',
+                   'Topic :: Internet :: WWW/HTTP'])
+
+print 'Setup complete!'
diff --git a/setup_utils.py b/setup_utils.py
new file mode 100644
index 0000000..05443b6
--- /dev/null
+++ b/setup_utils.py
@@ -0,0 +1,86 @@
+# Copyright (C) 2010 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Utility functions for setup.py file(s)."""
+
+
+__author__ = 'tom.h.miller@gmail.com (Tom Miller)'
+
+
+def get_missing_requirements():
+  """Return a list of missing third party packages."""
+  import sys
+
+  sys_path_original = sys.path[:]
+  # Remove the current directory from the list of paths to check when
+  # importing modules.
+  try:
+    # Sometimes it's represented by an empty string?
+    sys.path.remove('')
+  except ValueError:
+    import os.path
+    sys.path.remove(os.path.abspath(os.path.curdir))
+  missing_pkgs = []
+  third_party_reqs = ['oauth2', 'httplib2']
+  for pkg in third_party_reqs:
+    try:
+      __import__(pkg)
+    except ImportError:
+      missing_pkgs.append(pkg)
+  # JSON support gets its own special logic
+  try:
+    import_json(sys.path)
+  except ImportError:
+    missing_pkgs.append('simplejson')
+
+  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')