diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index 1dfd3d1c834f547c09dbee90d1b895b001e81512..c256ea479f052d90a5624c1dfe9746ec8fe70dec 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -314,6 +314,9 @@ class SomePackage(Package):
     """Specs of virtual packages provided by this package, keyed by name."""
     provided = {}
 
+    """Specs of packages this one extends, keyed by name."""
+    extendees = {}
+
     """Specs of conflicting packages, keyed by name. """
     conflicted = {}
 
diff --git a/lib/spack/spack/relations.py b/lib/spack/spack/relations.py
index b1f43489454f66be544db50fa126d9d8ed5bee3a..aaca9c199e427d0f518e86e065db0b73a48a42df 100644
--- a/lib/spack/spack/relations.py
+++ b/lib/spack/spack/relations.py
@@ -107,8 +107,9 @@ def depends_on(*specs):
     """Adds a dependencies local variable in the locals of
        the calling class, based on args. """
     pkg = get_calling_package_name()
+    clocals = caller_locals()
+    dependencies = clocals.setdefault('dependencies', {})
 
-    dependencies = caller_locals().setdefault('dependencies', {})
     for string in specs:
         for spec in spack.spec.parse(string):
             if pkg == spec.name:
@@ -116,6 +117,29 @@ def depends_on(*specs):
             dependencies[spec.name] = spec
 
 
+def extends(*specs):
+    """Same as depends_on, but dependency is symlinked into parent prefix.
+
+    This is for Python and other language modules where the module
+    needs to be installed into the prefix of the Python installation.
+    Spack handles this by installing modules into their own prefix,
+    but allowing ONE module version to be symlinked into a parent
+    Python install at a time.
+
+    """
+    pkg = get_calling_package_name()
+    clocals = caller_locals()
+    dependencies = clocals.setdefault('dependencies', {})
+    extendees = clocals.setdefault('extendees', {})
+
+    for string in specs:
+        for spec in spack.spec.parse(string):
+            if pkg == spec.name:
+                raise CircularReferenceError('depends_on', pkg)
+            dependencies[spec.name] = spec
+            extendees[spec.name] = spec
+
+
 def provides(*specs, **kwargs):
     """Allows packages to provide a virtual dependency.  If a package provides
        'mpi', other packages can declare that they depend on "mpi", and spack