summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2018-11-07 01:06:18 +0100
committerTodd Gamblin <tgamblin@llnl.gov>2018-11-06 16:06:18 -0800
commita474d83d586bd0258c0a15473b049ab95b6e48a9 (patch)
tree9e78a8ccb427d58a35cdc7c5d34047308e127092
parent05779d911fd1b1caa376120757a72b133c75d884 (diff)
downloadspack-a474d83d586bd0258c0a15473b049ab95b6e48a9.tar.gz
spack-a474d83d586bd0258c0a15473b049ab95b6e48a9.tar.bz2
spack-a474d83d586bd0258c0a15473b049ab95b6e48a9.tar.xz
spack-a474d83d586bd0258c0a15473b049ab95b6e48a9.zip
bugfix: work around ruamel.yaml vendoring issues (#9725)
- Delete references to ruamel.yaml at Spack start-up, if they are present - ruamel.yaml generates a .pth file when installed via pip that has the effect of always preferring the version of this package installed at site scope (effectively preventing us from vendoring it). - This mechanism triggers when implicitly importing the 'site' module when the python interpreter is started. In this PR we explicitly delete references to 'ruamel.yaml' and 'ruamel' in sys.modules, if any, after we set 'sys.path' to search from the directory where we store vendored packages. This ensures that the imports after those statements will be done from our vendored version. - See #9206 for further details
-rwxr-xr-xbin/spack12
1 files changed, 12 insertions, 0 deletions
diff --git a/bin/spack b/bin/spack
index c62871d6a6..171ee0f724 100755
--- a/bin/spack
+++ b/bin/spack
@@ -31,6 +31,18 @@ if sys.version_info[:2] == (2, 6):
sys.path.insert(0, spack_external_libs)
+# Here we delete ruamel.yaml in case it has been already imported from site
+# (see #9206 for a broader description of the issue).
+#
+# Briefly: ruamel.yaml produces a .pth file when installed with pip that
+# makes the site installed package the preferred one, even tough sys.path
+# is modified to point to another version of ruamel.yaml.
+if 'ruamel.yaml' in sys.modules:
+ del sys.modules['ruamel.yaml']
+
+if 'ruamel' in sys.modules:
+ del sys.modules['ruamel']
+
# Once we've set up the system path, run the spack main method
import spack.main # noqa
sys.exit(spack.main.main())