Basic setuptools support
diff --git a/reclass.py.in b/reclass.py.in
deleted file mode 100644
index a2e036a..0000000
--- a/reclass.py.in
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# reclass — recursive external node classifier
-#
-# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-__name__ = 'reclass'
-__description__ = 'classify nodes based on an external data source'
-__version__ = '1.0'
-__author__ = 'martin f. krafft <madduck@madduck.net>'
-__copyright__ = 'Copyright © 2007–13 ' + __author__
-__licence__ = 'Artistic Licence 2.0'
-
-import sys, os, posix
-import reclass.config
-from reclass.output import OutputLoader
-from reclass.storage import StorageBackendLoader
-import reclass.errors
-from reclass import get_data, output
-
-def _error(msg, rc):
-    print >>sys.stderr, msg
-    sys.exit(rc)
-
-config_file = None
-for d in (os.getcwd(), os.path.dirname(sys.argv[0])):
-    f = os.path.join(d, __name__ + '-config.yml')
-    if os.access(f, os.R_OK):
-        config_file = f
-        break
-try:
-    defaults = { 'pretty_print' : True, 'output' : 'yaml' }
-    options = reclass.config.get_options(__name__, __version__,
-                                         __description__, config_file,
-                                         defaults)
-    nodes_uri, classes_uri = reclass.config.path_mangler(options.inventory_base_uri,
-                                                            options.nodes_uri,
-                                                            options.classes_uri)
-    data = get_data(options.storage_type, nodes_uri, classes_uri,
-                    options.node)
-    print output(data, options.output, options.pretty_print)
-    sys.exit(posix.EX_OK)
-
-except reclass.errors.ReclassException, e:
-    _error(e.message, e.rc)
diff --git a/reclass/main.py b/reclass/main.py
new file mode 100644
index 0000000..a1ee0a9
--- /dev/null
+++ b/reclass/main.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+# reclass — recursive external node classifier
+#
+# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+__name__ = 'reclass'
+__description__ = 'classify nodes based on an external data source'
+__version__ = '1.0'
+__author__ = 'martin f. krafft <madduck@madduck.net>'
+__copyright__ = 'Copyright © 2007–13 ' + __author__
+__licence__ = 'Artistic Licence 2.0'
+
+import sys, os, posix
+import reclass.config
+from reclass.output import OutputLoader
+from reclass.storage import StorageBackendLoader
+import reclass.errors
+from reclass import get_data, output
+
+def _error(msg, rc):
+    print >>sys.stderr, msg
+    sys.exit(rc)
+
+def run():
+    config_file = None
+    for d in (os.getcwd(), os.path.dirname(sys.argv[0])):
+        f = os.path.join(d, __name__ + '-config.yml')
+        if os.access(f, os.R_OK):
+            config_file = f
+            break
+    try:
+        defaults = { 'pretty_print' : True, 'output' : 'yaml' }
+        options = reclass.config.get_options(__name__, __version__,
+                                             __description__, config_file,
+                                             defaults)
+        nodes_uri, classes_uri = reclass.config.path_mangler(options.inventory_base_uri,
+                                                                options.nodes_uri,
+                                                                options.classes_uri)
+        data = get_data(options.storage_type, nodes_uri, classes_uri,
+                        options.node)
+        print output(data, options.output, options.pretty_print)
+        sys.exit(posix.EX_OK)
+
+    except reclass.errors.ReclassException, e:
+        _error(e.message, e.rc)
diff --git a/run_tests.py b/run_tests.py
deleted file mode 100755
index 7658f91..0000000
--- a/run_tests.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# This file is part of reclass (http://github.com/madduck/reclass)
-#
-# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-import nose
-nose.main()
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..9e5911f
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,11 @@
+from setuptools import setup, find_packages
+setup(
+    name = "Reclass",
+    version = "1.0",
+    packages = find_packages(), 
+    entry_points = {
+      'console_scripts': ['reclass = reclass.main:run' ],
+    },
+    install_requires = ['pyyaml'],
+    setup_requires = ['nose'],
+)