diff --git a/requirements-extra.txt b/requirements-extra.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a888efb2f411720ac32b7ea2b0677945389a793c
--- /dev/null
+++ b/requirements-extra.txt
@@ -0,0 +1,4 @@
+indexed_gzip>=0.6.1,<1
+wxpython>=3.0.2.0,<4.1
+trimesh==2.*
+rtree==0.8
diff --git a/requirements.txt b/requirements.txt
index c902fc6b1b057d98c40a3e163e9ade23c5ddbc12..5044c24cdc1d2600f752841780a3f99886a29393 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,7 +3,3 @@ deprecation==1.*
 numpy==1.*
 scipy>=0.18,<1
 nibabel==2.*
-indexed_gzip>=0.6.1,<1
-wxpython>=3.0.2.0,<4.1
-trimesh==2
-rtree==0.8
diff --git a/setup.py b/setup.py
index 05951435bef1065fadcdf68b77f18ba2891ae60b..c1fe26d731df984ada69d89329d0fdbf11f3a2db 100644
--- a/setup.py
+++ b/setup.py
@@ -20,10 +20,16 @@ from setuptools import Command
 basedir = op.dirname(__file__)
 
 # Dependencies are listed in requirements.txt
-install_requires = open(op.join(basedir, 'requirements.txt'), 'rt').readlines()
+with open(op.join(basedir, 'requirements.txt'), 'rt') as f:
+    install_requires = f.readlines()
 
 # Development/test dependencies are listed in requirements-dev.txt
-dev_requires = open(op.join(basedir, 'requirements-dev.txt'), 'rt').readlines()
+with open(op.join(basedir, 'requirements-dev.txt'), 'rt') as f:
+    dev_requires = f.readlines()
+
+# Optional dependencies are listed in requirements-extra.txt
+with open(op.join(basedir, 'requirements-extra.txt'), 'rt') as f:
+    extra_requires = {'extras' : f.readlines()}
 
 packages = find_packages(
     exclude=('doc', 'tests', 'dist', 'build', 'fslpy.egg-info'))
@@ -109,6 +115,7 @@ setup(
     packages=packages,
 
     install_requires=install_requires,
+    extras_require=extra_requires,
     setup_requires=dev_requires,
 
     test_suite='tests',