From 6eb942cf456e8f2db328d5ea0dff52eb4f013aba Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Thu, 26 Aug 2021 15:44:31 -0500 Subject: Speedup environment activation, part 2 (#25633) This is a direct followup to #13557 which caches additional attributes that were added in #24095 that are expensive to compute. I had to reopen #25556 in another PR to invalidate the GitLab CI cache, but see #25556 for prior discussion. ### Before ```console $ time spack env activate . real 2m13.037s user 1m25.584s sys 0m43.654s $ time spack env view regenerate ==> Updating view at /Users/Adam/.spack/.spack-env/view real 16m3.541s user 10m28.892s sys 4m57.816s $ time spack env deactivate real 2m30.974s user 1m38.090s sys 0m49.781s ``` ### After ```console $ time spack env activate . real 0m8.937s user 0m7.323s sys 0m1.074s $ time spack env view regenerate ==> Updating view at /Users/Adam/.spack/.spack-env/view real 2m22.024s user 1m44.739s sys 0m30.717s $ time spack env deactivate real 0m10.398s user 0m8.414s sys 0m1.630s ``` Fixes #25555 Fixes #25541 * Speedup environment activation, part 2 * Only query distutils a single time * Fix KeyError bug * Make vermin happy * Manual memoize * Add comment on cross-compiling * Use platform-specific include directory * Fix multiple bugs * Fix python_inc discrepancy * Fix import tests --- lib/spack/spack/build_systems/python.py | 16 +++++++++------- lib/spack/spack/build_systems/sip.py | 5 ++++- 2 files changed, 13 insertions(+), 8 deletions(-) (limited to 'lib') diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py index 27b1d4a10c..c3bf323d84 100644 --- a/lib/spack/spack/build_systems/python.py +++ b/lib/spack/spack/build_systems/python.py @@ -127,7 +127,10 @@ class PythonPackage(PackageBase): list: list of strings of module names """ modules = [] - root = self.spec['python'].package.get_python_lib(prefix=self.prefix) + root = os.path.join( + self.prefix, + self.spec['python'].package.config_vars['python_lib']['false']['false'], + ) # Some Python libraries are packages: collections of modules # distributed in directories containing __init__.py files @@ -252,12 +255,11 @@ class PythonPackage(PackageBase): # Get all relative paths since we set the root to `prefix` # We query the python with which these will be used for the lib and inc # directories. This ensures we use `lib`/`lib64` as expected by python. - pure_site_packages_dir = spec['python'].package.get_python_lib( - plat_specific=False, prefix='') - plat_site_packages_dir = spec['python'].package.get_python_lib( - plat_specific=True, prefix='') - inc_dir = spec['python'].package.get_python_inc( - plat_specific=True, prefix='') + pure_site_packages_dir = spec['python'].package.config_vars[ + 'python_lib']['false']['false'] + plat_site_packages_dir = spec['python'].package.config_vars[ + 'python_lib']['true']['false'] + inc_dir = spec['python'].package.config_vars['python_inc']['true'] args += ['--root=%s' % prefix, '--install-purelib=%s' % pure_site_packages_dir, diff --git a/lib/spack/spack/build_systems/sip.py b/lib/spack/spack/build_systems/sip.py index 744989e2d6..1b9d01fbf4 100644 --- a/lib/spack/spack/build_systems/sip.py +++ b/lib/spack/spack/build_systems/sip.py @@ -64,7 +64,10 @@ class SIPPackage(PackageBase): list: list of strings of module names """ modules = [] - root = self.spec['python'].package.get_python_lib(prefix=self.prefix) + root = os.path.join( + self.prefix, + self.spec['python'].package.config_vars['python_lib']['false']['false'], + ) # Some Python libraries are packages: collections of modules # distributed in directories containing __init__.py files -- cgit v1.2.3-70-g09d2