diff --git a/var/spack/repos/builtin/packages/caffe/package.py b/var/spack/repos/builtin/packages/caffe/package.py
index f282262d212e7dab2e23f9d06dc98c624b343079..24bbe1ec6a114cef7b9101ced7f29f5c11c9d5f5 100644
--- a/var/spack/repos/builtin/packages/caffe/package.py
+++ b/var/spack/repos/builtin/packages/caffe/package.py
@@ -35,17 +35,17 @@ class Caffe(CMakePackage):
 
     version('rc5', '692bd3580b7576485cde6b1e03eb5a6d')
 
-    variant('gpu', default=False, 
+    variant('gpu', default=False,
             description='Builds with support for GPUs via CUDA and cuDNN')
-    variant('opencv', default=True, 
+    variant('opencv', default=True,
             description='Build with OpenCV support')
-    variant('leveldb', default=True, 
+    variant('leveldb', default=True,
             description="Build with levelDB")
-    variant('lmdb', default=True, 
+    variant('lmdb', default=True,
             description="Build with lmdb")
-    variant('python', default=False, 
+    variant('python', default=False,
             description='Build python wrapper and caffe python layer')
-    variant('matlab', default=False, 
+    variant('matlab', default=False,
             description='Build Matlab wrapper')
 
     depends_on('boost')
@@ -62,7 +62,7 @@ class Caffe(CMakePackage):
     depends_on('leveldb', when='+leveldb')
     depends_on('lmdb', when='+lmdb')
     depends_on('python@2.7:', when='+python')
-    depends_on('py-numpy@1.7:', when='+python')
+    depends_on('py-numpy@1.7:', when='+python', type=('build', 'run'))
     depends_on('matlab', when='+matlab')
 
     extends('python', when='+python')
diff --git a/var/spack/repos/builtin/packages/cantera/package.py b/var/spack/repos/builtin/packages/cantera/package.py
index fece11380de18397e06197dbf34201b1847a8e99..0685772f82b37af2240f28ad8cbb7d26eb19d282 100644
--- a/var/spack/repos/builtin/packages/cantera/package.py
+++ b/var/spack/repos/builtin/packages/cantera/package.py
@@ -62,8 +62,8 @@ class Cantera(Package):
     depends_on('py-cython', when='+python', type=('build', 'run'))
     depends_on('py-3to2',   when='+python', type=('build', 'run'))
     # TODO: these "when" specs don't actually work
-    # depends_on('py-unittest2',     when='+python^python@2.6')
-    # depends_on('py-unittest2py3k', when='+python^python@3.1')
+    # depends_on('py-unittest2',     when='+python^python@2.6', type=('build', 'run'))  # noqa
+    # depends_on('py-unittest2py3k', when='+python^python@3.1', type=('build', 'run'))  # noqa
 
     # Matlab toolbox dependencies
     # TODO: add Matlab package
diff --git a/var/spack/repos/builtin/packages/conduit/package.py b/var/spack/repos/builtin/packages/conduit/package.py
index 9715542126e995df4c5f156d290aaaf4361f3ed0..ddefde4fb75145377e0159ae80aa58bda7e760e1 100644
--- a/var/spack/repos/builtin/packages/conduit/package.py
+++ b/var/spack/repos/builtin/packages/conduit/package.py
@@ -88,7 +88,7 @@ class Conduit(Package):
     extends("python", when="+python")
     # TODO: blas and lapack are disabled due to build
     # issues Cyrus experienced on OSX 10.11.6
-    depends_on("py-numpy~blas~lapack", when="+python")
+    depends_on("py-numpy~blas~lapack", when="+python", type=('build', 'run'))
 
     #######################
     # I/O Packages
@@ -113,7 +113,7 @@ class Conduit(Package):
     #######################
     # Documentation related
     #######################
-    depends_on("py-sphinx", when="+python+doc")
+    depends_on("py-sphinx", when="+python+doc", type='build')
     depends_on("doxygen", when="+doc")
 
     def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/dia/package.py b/var/spack/repos/builtin/packages/dia/package.py
index 94cd75656d58975b565df4f47ae3e177846cc081..af9d1b23acad58c4359cb6ec481195cfa71a60df 100644
--- a/var/spack/repos/builtin/packages/dia/package.py
+++ b/var/spack/repos/builtin/packages/dia/package.py
@@ -35,12 +35,14 @@ class Dia(Package):
     depends_on('intltool', type='build')
     depends_on('gtkplus@2.6.0:')
     depends_on('cairo')
-    # depends_on('libart') # optional dependency, not yet supported by spack.
     depends_on('libpng')
     depends_on('libxslt')
     depends_on('python')
     depends_on('swig')
-    # depends_on('py-gtk') # optional dependency, not yet supported by spack.
+
+    # TODO: Optional dependencies, not yet supported by Spack
+    # depends_on('libart')
+    # depends_on('py-gtk', type=('build', 'run'))
 
     def url_for_version(self, version):
         """Handle Dia's version-based custom URLs."""
diff --git a/var/spack/repos/builtin/packages/flux/package.py b/var/spack/repos/builtin/packages/flux/package.py
index 7abd9f46bd3f5176522c75dac95a383aa197ef55..c5d61bbc2aedafe5672a07501f1ca5e5d2c9a405 100644
--- a/var/spack/repos/builtin/packages/flux/package.py
+++ b/var/spack/repos/builtin/packages/flux/package.py
@@ -47,7 +47,7 @@ class Flux(AutotoolsPackage):
     depends_on("libjson-c")
     depends_on("libxslt")
     depends_on("python")
-    depends_on("py-cffi")
+    depends_on("py-cffi", type=('build', 'run'))
     depends_on("jansson")
 
     depends_on("asciidoc", type='build', when="+docs")
diff --git a/var/spack/repos/builtin/packages/llvm/package.py b/var/spack/repos/builtin/packages/llvm/package.py
index 1da14feb4f43abe91bbc17747101688919b2663a..057297737cc6edb5aa76caa89fce901979b48286 100644
--- a/var/spack/repos/builtin/packages/llvm/package.py
+++ b/var/spack/repos/builtin/packages/llvm/package.py
@@ -77,7 +77,7 @@ class Llvm(Package):
 
     # Universal dependency
     depends_on('python@2.7:2.8')  # Seems not to support python 3.X.Y
-    depends_on('py-lit')
+    depends_on('py-lit', type=('build', 'run'))
 
     # lldb dependencies
     depends_on('ncurses', when='+lldb')
diff --git a/var/spack/repos/builtin/packages/mesa/package.py b/var/spack/repos/builtin/packages/mesa/package.py
index 7d6c55969612079adc285443146332047e83d15b..0c7aed7fca1574e25118a14e071039e0a1bca63e 100644
--- a/var/spack/repos/builtin/packages/mesa/package.py
+++ b/var/spack/repos/builtin/packages/mesa/package.py
@@ -36,7 +36,7 @@ class Mesa(AutotoolsPackage):
 
     # General dependencies
     depends_on('python@2.6.4:')
-    depends_on('py-mako@0.3.4:')
+    depends_on('py-mako@0.3.4:', type=('build', 'run'))
     depends_on('flex@2.5.35:', type='build')
     depends_on('bison@2.4.1:', type='build')
 
diff --git a/var/spack/repos/builtin/packages/py-h5py/package.py b/var/spack/repos/builtin/packages/py-h5py/package.py
index 666905e5c0cf42d542d50891ee820af4129bc03d..edca2f45b0e68a4bb54574b46b809f4863804daf 100644
--- a/var/spack/repos/builtin/packages/py-h5py/package.py
+++ b/var/spack/repos/builtin/packages/py-h5py/package.py
@@ -45,7 +45,7 @@ class PyH5py(PythonPackage):
     depends_on('hdf5@1.8.4:')
     depends_on('hdf5+mpi', when='+mpi')
     depends_on('mpi', when='+mpi')
-    depends_on('py-mpi4py', when='+mpi')
+    depends_on('py-mpi4py', when='+mpi', type=('build', 'run'))
 
     # Build and runtime dependencies
     depends_on('py-numpy@1.6.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-ipython/package.py b/var/spack/repos/builtin/packages/py-ipython/package.py
index 0d62ade3b3536c9bb76c640411dec9448b4142bc..8806e1cf8e695011fcaeac4ce0c9719eba857905 100644
--- a/var/spack/repos/builtin/packages/py-ipython/package.py
+++ b/var/spack/repos/builtin/packages/py-ipython/package.py
@@ -42,8 +42,8 @@ class PyIpython(PythonPackage):
 
     # These dependencies breaks concretization
     # See https://github.com/LLNL/spack/issues/2793
-    # depends_on('py-backports-shutil-get-terminal-size', when="^python@:3.2.999")  # noqa
-    # depends_on('py-pathlib2', when="^python@:3.3.999")
+    # depends_on('py-backports-shutil-get-terminal-size', type=('build', 'run'), when="^python@:3.2.999")  # noqa
+    # depends_on('py-pathlib2', type=('build', 'run'), when="^python@:3.3.999")
     depends_on('py-backports-shutil-get-terminal-size', type=('build', 'run'))
     depends_on('py-pathlib2',                   type=('build', 'run'))
 
diff --git a/var/spack/repos/builtin/packages/py-lazyarray/package.py b/var/spack/repos/builtin/packages/py-lazyarray/package.py
index 413a51020bb644050ba24be6b228503554b2cd81..8dcc999f62d054ce9430c3b402d12e3555723545 100644
--- a/var/spack/repos/builtin/packages/py-lazyarray/package.py
+++ b/var/spack/repos/builtin/packages/py-lazyarray/package.py
@@ -34,5 +34,5 @@ class PyLazyarray(PythonPackage):
 
     version('0.2.8', '8e0072f0892b9fc0516e7048f96e9d74')
 
-    depends_on('py-numpy@1.3:')
-    depends_on('py-numpy@1.5:', when='^python@3:')
+    depends_on('py-numpy@1.3:', type=('build', 'run'))
+    depends_on('py-numpy@1.5:', type=('build', 'run'), when='^python@3:')
diff --git a/var/spack/repos/builtin/packages/py-matplotlib/package.py b/var/spack/repos/builtin/packages/py-matplotlib/package.py
index 36e26aa7ee79e3bb93cc51bdb6573669228f5247..53a7d9af97553bdf5fdc0de0a0c716f1570f49d3 100644
--- a/var/spack/repos/builtin/packages/py-matplotlib/package.py
+++ b/var/spack/repos/builtin/packages/py-matplotlib/package.py
@@ -82,7 +82,7 @@ class PyMatplotlib(PythonPackage):
     # --------- Optional dependencies
     depends_on('pkg-config', type='build')    # why not...
     depends_on('pil', when='+image', type=('build', 'run'))
-    depends_on('py-ipython', when='+ipython')
+    depends_on('py-ipython', when='+ipython', type=('build', 'run'))
     depends_on('ghostscript', when='+latex', type='run')
     depends_on('texlive', when='+latex', type='run')
 
diff --git a/var/spack/repos/builtin/packages/py-pygobject/package.py b/var/spack/repos/builtin/packages/py-pygobject/package.py
index 52a8c13dd638a9f0f20fecde2ff09e3b2fae90a9..4cb6d6ccb063f91ba1be8980e6d846127ba160f9 100644
--- a/var/spack/repos/builtin/packages/py-pygobject/package.py
+++ b/var/spack/repos/builtin/packages/py-pygobject/package.py
@@ -40,7 +40,7 @@ class PyPygobject(AutotoolsPackage):
 
     depends_on("libffi")
     depends_on('glib')
-    depends_on('py-py2cairo')
+    depends_on('py-py2cairo', type=('build', 'run'))
     depends_on('gobject-introspection')
 
     patch('pygobject-2.28.6-introspection-1.patch', when='@2.28.3:2.28.6')
diff --git a/var/spack/repos/builtin/packages/py-pygtk/package.py b/var/spack/repos/builtin/packages/py-pygtk/package.py
index 462bc88910a7fe6cc97926d6d7dda8097cbf0208..5d34a3cc86f47aed464ba04f479b6cd68cfc0e7a 100644
--- a/var/spack/repos/builtin/packages/py-pygtk/package.py
+++ b/var/spack/repos/builtin/packages/py-pygtk/package.py
@@ -39,8 +39,8 @@ class PyPygtk(AutotoolsPackage):
     depends_on('glib')
     # for GTK 3.X use pygobject 3.X instead of pygtk
     depends_on('gtkplus+X@2.24:2.99')
-    depends_on('py-pygobject@2.28:2.99')
-    depends_on('py-py2cairo')
+    depends_on('py-pygobject@2.28:2.99', type=('build', 'run'))
+    depends_on('py-py2cairo', type=('build', 'run'))
 
     def install(self, spec, prefix):
         make('install', parallel=False)
diff --git a/var/spack/repos/builtin/packages/py-scientificpython/package.py b/var/spack/repos/builtin/packages/py-scientificpython/package.py
index f0fe2e4e6c19c4a245e7ae97ab1aa5a335d4aecc..0fb3524c0c396240bc9ef115d405593f34569a9e 100644
--- a/var/spack/repos/builtin/packages/py-scientificpython/package.py
+++ b/var/spack/repos/builtin/packages/py-scientificpython/package.py
@@ -35,4 +35,4 @@ class PyScientificpython(PythonPackage):
     url      = "https://sourcesup.renater.fr/frs/download.php/file/4411/ScientificPython-2.8.1.tar.gz"
     version('2.8.1', '73ee0df19c7b58cdf2954261f0763c77')
 
-    depends_on('py-numpy')
+    depends_on('py-numpy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-singledispatch/package.py b/var/spack/repos/builtin/packages/py-singledispatch/package.py
index 9125ecb5f884dab9ad93f5acdc6c90c014474dc2..6fa4d9b1bd2c3a9d1c6845e8969e26c07ff574d4 100644
--- a/var/spack/repos/builtin/packages/py-singledispatch/package.py
+++ b/var/spack/repos/builtin/packages/py-singledispatch/package.py
@@ -34,7 +34,7 @@ class PySingledispatch(PythonPackage):
     version('3.4.0.3', 'af2fc6a3d6cc5a02d0bf54d909785fcb')
 
     depends_on('py-setuptools', type='build')
-    depends_on('py-six')
+    depends_on('py-six', type=('build', 'run'))
 
     # This dependency breaks concretization
     # See https://github.com/LLNL/spack/issues/2793
diff --git a/var/spack/repos/builtin/packages/py-symengine/package.py b/var/spack/repos/builtin/packages/py-symengine/package.py
index 0817d394f222eddf221fc0ba3f3515c68dca49ba..bc48785e367f51802d7b974a27167e9473ee19c2 100644
--- a/var/spack/repos/builtin/packages/py-symengine/package.py
+++ b/var/spack/repos/builtin/packages/py-symengine/package.py
@@ -37,7 +37,7 @@ class PySymengine(PythonPackage):
     # Build dependencies
     depends_on('python@2.7:2.8,3.3:')
     depends_on('py-setuptools',     type='build')
-    depends_on('py-cython@0.19.1:')
+    depends_on('py-cython@0.19.1:', type='build')
     depends_on('cmake@2.8.7:',      type='build')
     depends_on('symengine@0.2.0:')
 
diff --git a/var/spack/repos/builtin/packages/py-sympy/package.py b/var/spack/repos/builtin/packages/py-sympy/package.py
index 58c4167e23ed06c477d33b940c2e0059fc6d639b..c47007be9fc8c03c749e811afc2a32a085952208 100644
--- a/var/spack/repos/builtin/packages/py-sympy/package.py
+++ b/var/spack/repos/builtin/packages/py-sympy/package.py
@@ -33,4 +33,4 @@ class PySympy(PythonPackage):
     version('0.7.6', '3d04753974306d8a13830008e17babca')
     version('1.0', '43e797de799f00f9e8fd2307dba9fab1')
 
-    depends_on('py-mpmath', when='@1.0:')
+    depends_on('py-mpmath', when='@1.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-unittest2/package.py b/var/spack/repos/builtin/packages/py-unittest2/package.py
index f0c0208978f0366c3b84977644993bc2ad93b6ef..ff11ce05cd7904c4d669eb96298e52e76bff5af9 100644
--- a/var/spack/repos/builtin/packages/py-unittest2/package.py
+++ b/var/spack/repos/builtin/packages/py-unittest2/package.py
@@ -35,4 +35,4 @@ class PyUnittest2(PythonPackage):
     version('1.1.0', 'f72dae5d44f091df36b6b513305ea000')
 
     depends_on('py-setuptools', type='build')
-    depends_on('py-enum34', when='^python@:3.3')
+    depends_on('py-enum34', when='^python@:3.3', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/stat/package.py b/var/spack/repos/builtin/packages/stat/package.py
index aacebfd8c864771a224e665fab5b2377113b1db6..9d655b37580cc4bdeaa44c4c62779c3cb8ade819 100644
--- a/var/spack/repos/builtin/packages/stat/package.py
+++ b/var/spack/repos/builtin/packages/stat/package.py
@@ -53,7 +53,7 @@ class Stat(Package):
     depends_on('launchmon')
     depends_on('mrnet')
     depends_on('python')
-    depends_on('py-pygtk')
+    depends_on('py-pygtk', type=('build', 'run'))
     depends_on('swig')
     depends_on('mpi', when='+examples')
 
diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py
index 6cf1032f83fe2ef467c93f501ffd56ed7b98cb6f..3de72ea6c88d98690c5ec6d00fe48ae37f994a2d 100644
--- a/var/spack/repos/builtin/packages/trilinos/package.py
+++ b/var/spack/repos/builtin/packages/trilinos/package.py
@@ -120,7 +120,7 @@ def url_for_version(self, version):
     depends_on('hypre~internal-superlu~int64', when='+hypre')
     depends_on('hdf5+mpi', when='+hdf5')
     depends_on('python', when='+python')
-    depends_on('py-numpy', when='+python')
+    depends_on('py-numpy', when='+python', type=('build', 'run'))
     depends_on('swig', when='+python')
 
     patch('umfpack_from_suitesparse.patch', when='@:12.8.1')