diff --git a/setup.py b/setup.py
index 381f7b3a..fb3a7c7f 100644
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,6 @@
 import zulip
 
 import os
-from distutils.core import setup
 import sys
 
 import itertools
@@ -23,24 +22,54 @@ def recur_expand(target_root, dir):
     if len(paths):
       yield os.path.join(target_root, root), paths
 
-setup(name='zulip',
-      version=version(),
-      description='Bindings for the Zulip message API',
-      author='Zulip, Inc.',
-      author_email='zulip@zulip.com',
-      classifiers=[
-          'Development Status :: 3 - Alpha',
-          'Environment :: Web Environment',
-          'Intended Audience :: Developers',
-          'License :: OSI Approved :: MIT License',
-          'Topic :: Communications :: Chat',
-      ],
-      url='https://www.zulip.com/dist/api/',
-      packages=['zulip'],
-      data_files=[('share/zulip/examples', ["examples/zuliprc", "examples/send-message", "examples/subscribe",
-                                             "examples/get-public-streams", "examples/unsubscribe",
-                                             "examples/list-members", "examples/list-subscriptions",
-                                             "examples/print-messages"])] + \
-          list(recur_expand('share/zulip', 'integrations/')),
-      scripts=["bin/zulip-send"],
-     )
+# We should be installable with either setuptools or distutils.
+package_info = dict(
+    name='zulip',
+    version=version(),
+    description='Bindings for the Zulip message API',
+    author='Zulip, Inc.',
+    author_email='humbug@humbughq.com',
+    classifiers=[
+        'Development Status :: 3 - Alpha',
+        'Environment :: Web Environment',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: MIT License',
+        'Topic :: Communications :: Chat',
+    ],
+    url='https://www.zulip.com/dist/api/',
+    packages=['zulip'],
+    data_files=[('share/zulip/examples', ["examples/zuliprc", "examples/send-message", "examples/subscribe",
+                                           "examples/get-public-streams", "examples/unsubscribe",
+                                           "examples/list-members", "examples/list-subscriptions",
+                                           "examples/print-messages"])] + \
+        list(recur_expand('share/zulip', 'integrations/')),
+    scripts=["bin/zulip-send"],
+)
+
+setuptools_info = dict(
+    install_requires=['requests>=0.12.1',
+                      'simplejson',
+    ],
+)
+
+try:
+  from setuptools import setup
+  package_info.update(setuptools_info)
+except ImportError:
+  from distutils.core import setup
+  from distutils.version import LooseVersion
+  # Manual dependency check
+  try:
+    import simplejson
+  except ImportError:
+    print >>sys.stderr, "simplejson is not installed"
+    sys.exit(1)
+  try:
+    import requests
+    assert(LooseVersion(requests.__version__) >= LooseVersion('0.12.1'))
+  except (ImportError, AssertionError):
+    print >>sys.stderr, "requests >=0.12.1 is not installed"
+    sys.exit(1)
+
+
+setup(**package_info)