Speedup environment activation (#13557)
* Add a transaction around repeated calls to `spec.prefix` in the activation process * cache the computation of home in the python package to speed up setting deps * ensure that module-scope variables are only set *once* per module
This commit is contained in:
parent
c36d9f297f
commit
a93a613668
3 changed files with 21 additions and 4 deletions
|
@ -422,6 +422,11 @@ def set_build_environment_variables(pkg, env, dirty):
|
||||||
|
|
||||||
def _set_variables_for_single_module(pkg, module):
|
def _set_variables_for_single_module(pkg, module):
|
||||||
"""Helper function to set module variables for single module."""
|
"""Helper function to set module variables for single module."""
|
||||||
|
# Put a marker on this module so that it won't execute the body of this
|
||||||
|
# function again, since it is not needed
|
||||||
|
marker = '_set_run_already_called'
|
||||||
|
if getattr(module, marker, False):
|
||||||
|
return
|
||||||
|
|
||||||
jobs = spack.config.get('config:build_jobs') if pkg.parallel else 1
|
jobs = spack.config.get('config:build_jobs') if pkg.parallel else 1
|
||||||
jobs = min(jobs, multiprocessing.cpu_count())
|
jobs = min(jobs, multiprocessing.cpu_count())
|
||||||
|
@ -489,6 +494,10 @@ def static_to_shared_library(static_lib, shared_lib=None, **kwargs):
|
||||||
|
|
||||||
m.static_to_shared_library = static_to_shared_library
|
m.static_to_shared_library = static_to_shared_library
|
||||||
|
|
||||||
|
# Put a marker on this module so that it won't execute the body of this
|
||||||
|
# function again, since it is not needed
|
||||||
|
setattr(m, marker, True)
|
||||||
|
|
||||||
|
|
||||||
def set_module_variables_for_package(pkg):
|
def set_module_variables_for_package(pkg):
|
||||||
"""Populate the module scope of install() with some useful functions.
|
"""Populate the module scope of install() with some useful functions.
|
||||||
|
|
|
@ -159,6 +159,7 @@ def activate(
|
||||||
cmds += 'export PS1="%s ${PS1}";\n' % prompt
|
cmds += 'export PS1="%s ${PS1}";\n' % prompt
|
||||||
|
|
||||||
if add_view and default_view_name in env.views:
|
if add_view and default_view_name in env.views:
|
||||||
|
with spack.store.db.read_transaction():
|
||||||
cmds += env.add_default_view_to_shell(shell)
|
cmds += env.add_default_view_to_shell(shell)
|
||||||
|
|
||||||
return cmds
|
return cmds
|
||||||
|
@ -207,6 +208,7 @@ def deactivate(shell='sh'):
|
||||||
cmds += 'fi;\n'
|
cmds += 'fi;\n'
|
||||||
|
|
||||||
if default_view_name in _active_environment.views:
|
if default_view_name in _active_environment.views:
|
||||||
|
with spack.store.db.read_transaction():
|
||||||
cmds += _active_environment.rm_default_view_from_shell(shell)
|
cmds += _active_environment.rm_default_view_from_shell(shell)
|
||||||
|
|
||||||
tty.debug("Deactivated environmennt '%s'" % _active_environment.name)
|
tty.debug("Deactivated environmennt '%s'" % _active_environment.name)
|
||||||
|
|
|
@ -163,6 +163,9 @@ class Python(AutotoolsPackage):
|
||||||
_DISTUTIL_CACHE_FILENAME = 'sysconfig.json'
|
_DISTUTIL_CACHE_FILENAME = 'sysconfig.json'
|
||||||
_distutil_vars = None
|
_distutil_vars = None
|
||||||
|
|
||||||
|
# Used to cache home locations, since computing them might be expensive
|
||||||
|
_homes = {}
|
||||||
|
|
||||||
# An in-source build with --enable-optimizations fails for python@3.X
|
# An in-source build with --enable-optimizations fails for python@3.X
|
||||||
build_directory = 'spack-build'
|
build_directory = 'spack-build'
|
||||||
|
|
||||||
|
@ -622,8 +625,11 @@ def home(self):
|
||||||
``packages.yaml`` unknowingly. Query the python executable to
|
``packages.yaml`` unknowingly. Query the python executable to
|
||||||
determine exactly where it is installed."""
|
determine exactly where it is installed."""
|
||||||
|
|
||||||
|
dag_hash = self.spec.dag_hash()
|
||||||
|
if dag_hash not in self._homes:
|
||||||
prefix = self.get_config_var('prefix')
|
prefix = self.get_config_var('prefix')
|
||||||
return Prefix(prefix)
|
self._homes[dag_hash] = Prefix(prefix)
|
||||||
|
return self._homes[dag_hash]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def libs(self):
|
def libs(self):
|
||||||
|
|
Loading…
Reference in a new issue