diff --git a/.gitignore b/.gitignore
index 89039a6..ba67d7d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@ dist
 *.pyc
 .ropeproject
 .pytest_cache
+test.conf
+.venv/
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..9d3d234
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+rpkg
+rpm
diff --git a/setup.py b/setup.py
index 928f5c1..77756b0 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,35 @@
 from setuptools import setup
 
+def get_requirements(requirements_file="requirements.txt"):
+    """Get the contents of a file listing the requirements.
+
+    :arg requirements_file: path to a requirements file
+    :type requirements_file: string
+    :returns: the list of requirements, or an empty list if
+              `requirements_file` could not be opened or read
+    :return type: list
+    """
+
+    lines = open(requirements_file).readlines()
+    dependencies = []
+    for line in lines:
+        maybe_dep = line.strip()
+        if maybe_dep.startswith("#"):
+            # Skip pure comment lines
+            continue
+        if maybe_dep.startswith("git+"):
+            # VCS reference for dev purposes, expect a trailing comment
+            # with the normal requirement
+            __, __, maybe_dep = maybe_dep.rpartition("#")
+        else:
+            # Ignore any trailing comment
+            maybe_dep, __, __ = maybe_dep.partition("#")
+        # Remove any whitespace and assume non-empty results are dependencies
+        maybe_dep = maybe_dep.strip()
+        if maybe_dep:
+            dependencies.append(maybe_dep)
+    return dependencies
+
 setup(
     name="centpkg",
     version='0.4.6',
@@ -9,6 +39,7 @@ setup(
     license="GPLv2+",
     package_dir={'': 'src'},
     packages=['centpkg'],
+    install_requires=get_requirements(),
     scripts=['src/bin/centpkg'],
     data_files=[('/etc/rpkg',['src/centpkg.conf']),]
 )