diff --git a/lib/spack/spack/modules.py b/lib/spack/spack/modules.py
index 885f2197eff6995f74a85c5d0063164e6ea2b4e7..a6ffded93537abd58983aba0a247ccf94ddeb0c9 100644
--- a/lib/spack/spack/modules.py
+++ b/lib/spack/spack/modules.py
@@ -389,7 +389,6 @@ def write(self, overwrite=False):
             for mod in modules:
                 set_module_variables_for_package(package, mod)
             set_module_variables_for_package(package, package.module)
-            package.setup_environment(spack_env, env)
             package.setup_dependent_package(self.pkg.module, self.spec)
             package.setup_dependent_environment(spack_env, env, self.spec)
 
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index e5ea8c56adda081024f1f008e7c30a798ddc60c7..361691379ecdcc76d248166509e8b9f9423fa2e4 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -1452,7 +1452,7 @@ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
         This is useful if there are some common steps to installing
         all extensions for a certain package.
         """
-        self.setup_environment(spack_env, run_env)
+        pass
 
     def setup_dependent_package(self, module, dependent_spec):
         """Set up Python module-scope variables for dependent packages.
diff --git a/lib/spack/spack/test/modules.py b/lib/spack/spack/test/modules.py
index 4f35df19827d1df85f429e8c838035f8a601f19b..bb1b0006f80fc7d1cc053bd99bc40c429cad4835 100644
--- a/lib/spack/spack/test/modules.py
+++ b/lib/spack/spack/test/modules.py
@@ -357,6 +357,21 @@ def test_suffixes(self, tcl_factory):
         generator = tcl_factory(spec)
         assert 'bar' in generator.use_name
 
+    def test_setup_environment(self, tcl_factory):
+        spec = spack.spec.Spec('mpileaks')
+        spec.concretize()
+        content = get_modulefile_content(tcl_factory, spec)
+        assert len([x for x in content if 'setenv FOOBAR' in x]) == 1
+        assert len(
+            [x for x in content if 'setenv FOOBAR "mpileaks"' in x]
+        ) == 1
+
+        content = get_modulefile_content(tcl_factory, spec['callpath'])
+        assert len([x for x in content if 'setenv FOOBAR' in x]) == 1
+        assert len(
+            [x for x in content if 'setenv FOOBAR "callpath"' in x]
+        ) == 1
+
 
 @pytest.mark.usefixtures('config', 'builtin_mock', 'stringio_open')
 class TestLmod(object):
diff --git a/var/spack/repos/builtin.mock/packages/callpath/package.py b/var/spack/repos/builtin.mock/packages/callpath/package.py
index 56b969df98a9a774d7d31a14cb3616da05c1d574..c00f4088662f1c9661903d0226c060008a193cfe 100644
--- a/var/spack/repos/builtin.mock/packages/callpath/package.py
+++ b/var/spack/repos/builtin.mock/packages/callpath/package.py
@@ -40,3 +40,6 @@ def install(self, spec, prefix):
         configure("--prefix=%s" % prefix)
         make()
         make("install")
+
+    def setup_environment(self, senv, renv):
+        renv.set('FOOBAR', self.name)
diff --git a/var/spack/repos/builtin.mock/packages/mpileaks/package.py b/var/spack/repos/builtin.mock/packages/mpileaks/package.py
index 10fbf3845eb24d2729fdc2798dd5d4ec44a2ec18..749fcc601adb736053a30a7d3e5878cbc2eaf683 100644
--- a/var/spack/repos/builtin.mock/packages/mpileaks/package.py
+++ b/var/spack/repos/builtin.mock/packages/mpileaks/package.py
@@ -44,3 +44,6 @@ class Mpileaks(Package):
 
     def install(self, spec, prefix):
         pass
+
+    def setup_environment(self, senv, renv):
+        renv.set('FOOBAR', self.name)