a474d83d58
- 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
48 lines
1.5 KiB
Python
Executable file
48 lines
1.5 KiB
Python
Executable file
#!/usr/bin/env python
|
|
#
|
|
# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import sys
|
|
|
|
if sys.version_info[:2] < (2, 6):
|
|
v_info = sys.version_info[:3]
|
|
sys.exit("Spack requires Python 2.6 or higher."
|
|
"This is Python %d.%d.%d." % v_info)
|
|
|
|
# Find spack's location and its prefix.
|
|
spack_file = os.path.realpath(os.path.expanduser(__file__))
|
|
spack_prefix = os.path.dirname(os.path.dirname(spack_file))
|
|
|
|
# Allow spack libs to be imported in our scripts
|
|
spack_lib_path = os.path.join(spack_prefix, "lib", "spack")
|
|
sys.path.insert(0, spack_lib_path)
|
|
|
|
# Add external libs
|
|
spack_external_libs = os.path.join(spack_lib_path, "external")
|
|
|
|
if sys.version_info[:2] == (2, 6):
|
|
sys.path.insert(0, os.path.join(spack_external_libs, 'py26'))
|
|
|
|
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())
|