diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py index 0f99fe536aa..3504406253a 100644 --- a/lib/spack/spack/build_systems/python.py +++ b/lib/spack/spack/build_systems/python.py @@ -17,7 +17,7 @@ import llnl.util.filesystem as fs import llnl.util.lang as lang import llnl.util.tty as tty -from llnl.util.filesystem import HeaderList, LibraryList +from llnl.util.filesystem import HeaderList, LibraryList, join_path import spack.builder import spack.config @@ -120,6 +120,12 @@ def skip_modules(self) -> Iterable[str]: """ return [] + @property + def bindir(self) -> str: + """Path to Python package's bindir, bin on unix like OS's Scripts on Windows""" + windows = self.spec.satisfies("platform=windows") + return join_path(self.spec.prefix, "Scripts" if windows else "bin") + def view_file_conflicts(self, view, merge_map): """Report all file conflicts, excepting special cases for python. Specifically, this does not report errors for duplicate diff --git a/var/spack/repos/builtin/packages/python-venv/package.py b/var/spack/repos/builtin/packages/python-venv/package.py index a814f472210..390b26c198b 100644 --- a/var/spack/repos/builtin/packages/python-venv/package.py +++ b/var/spack/repos/builtin/packages/python-venv/package.py @@ -93,6 +93,9 @@ def setup_dependent_run_environment(self, env, dependent_spec): path = os.path.join(dependent_spec.prefix, directory) if os.path.isdir(path): env.prepend_path("PYTHONPATH", path) + dep_bin_dir = getattr(dependent_spec.package, "bindir", None) + if dep_bin_dir and os.path.isdir(dep_bin_dir): + env.prepend_path("PATH", dep_bin_dir) def setup_dependent_package(self, module, dependent_spec): """Called before python modules' install() methods."""