From 643a28aac5d370172a4350a1c0dae642d516398e Mon Sep 17 00:00:00 2001 From: Oliver Breitwieser Date: Thu, 14 Sep 2017 16:23:38 -0400 Subject: python: extensions support for easy-install.pth --- var/spack/repos/builtin/packages/python/package.py | 40 ++++++++++++++++------ 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py index b176169236..c3ea2a0b15 100644 --- a/var/spack/repos/builtin/packages/python/package.py +++ b/var/spack/repos/builtin/packages/python/package.py @@ -496,6 +496,10 @@ class Python(AutotoolsPackage): def site_packages_dir(self): return join_path(self.python_lib_dir, 'site-packages') + @property + def easy_install_file(self): + return join_path(self.site_packages_dir, "easy-install.pth") + def setup_dependent_environment(self, spack_env, run_env, dependent_spec): """Set PYTHONPATH to include the site-packages directory for the extension and any other python extensions it depends on.""" @@ -577,11 +581,15 @@ class Python(AutotoolsPackage): return match_predicate(ignore_arg, patterns) - def write_easy_install_pth(self, exts): + def write_easy_install_pth(self, exts, prefix=None): + if not prefix: + prefix = self.prefix + paths = [] + unique_paths = set() + for ext in sorted(exts.values()): - ext_site_packages = join_path(ext.prefix, self.site_packages_dir) - easy_pth = join_path(ext_site_packages, "easy-install.pth") + easy_pth = join_path(ext.prefix, self.easy_install_file) if not os.path.isfile(easy_pth): continue @@ -599,10 +607,11 @@ class Python(AutotoolsPackage): re.search(r'setuptools.*egg$', line)): continue - paths.append(line) + if line not in unique_paths: + unique_paths.add(line) + paths.append(line) - site_packages = join_path(self.home, self.site_packages_dir) - main_pth = join_path(site_packages, "easy-install.pth") + main_pth = join_path(prefix, self.easy_install_file) if not paths: if os.path.isfile(main_pth): @@ -623,18 +632,29 @@ class Python(AutotoolsPackage): ignore = self.python_ignore(ext_pkg, args) args.update(ignore=ignore) + extensions_layout = args.get("extensions_layout", + spack.store.extensions) + super(Python, self).activate(ext_pkg, **args) - exts = spack.store.layout.extension_map(self.spec) + exts = extensions_layout.extension_map(self.spec) exts[ext_pkg.name] = ext_pkg.spec - self.write_easy_install_pth(exts) + + self.write_easy_install_pth( + exts, + prefix=extensions_layout.extendee_target_directory(self)) def deactivate(self, ext_pkg, **args): args.update(ignore=self.python_ignore(ext_pkg, args)) super(Python, self).deactivate(ext_pkg, **args) - exts = spack.store.layout.extension_map(self.spec) + extensions_layout = args.get("extensions_layout", + spack.store.extensions) + + exts = extensions_layout.extension_map(self.spec) # Make deactivate idempotent if ext_pkg.name in exts: del exts[ext_pkg.name] - self.write_easy_install_pth(exts) + self.write_easy_install_pth( + exts, + prefix=extensions_layout.extendee_target_directory(self)) -- cgit v1.2.3-60-g2f50