diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py
index 056606b429a680ae54068195b375f9b7f5dd3b16..a434dad5c49d03e157474fb6feef7cd086c12744 100644
--- a/lib/spack/spack/directory_layout.py
+++ b/lib/spack/spack/directory_layout.py
@@ -212,8 +212,10 @@ def read_spec(self, path):
             spec = Spec.from_yaml(f)
 
         # Specs read from actual installations are always concrete
-        spec._normal = True
-        spec._concrete = True
+        for s in spec.traverse():
+            s._normal = True
+            s._concrete = True
+
         return spec