Skip to content

Commit

Permalink
Merge pull request #3514 from Micket/sitecustomize
Browse files Browse the repository at this point in the history
update `Python` easyblock to move `sitecustomize.py` into `site-packages`
  • Loading branch information
boegel authored Dec 18, 2024
2 parents 678e0e8 + 51b25e5 commit ca29703
Showing 1 changed file with 8 additions and 17 deletions.
25 changes: 8 additions & 17 deletions easybuild/easyblocks/p/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
from easybuild.framework.easyconfig import CUSTOM
from easybuild.framework.easyconfig.templates import PYPI_SOURCE
from easybuild.tools.build_log import EasyBuildError, print_warning
from easybuild.tools.config import build_option, ERROR, log_path, PYTHONPATH, EBPYTHONPREFIXES
from easybuild.tools.config import build_option, ERROR, EBPYTHONPREFIXES
from easybuild.tools.modules import get_software_libdir, get_software_root, get_software_version
from easybuild.tools.filetools import apply_regex_substitutions, change_dir, mkdir
from easybuild.tools.filetools import read_file, remove_dir, symlink, write_file
Expand Down Expand Up @@ -142,9 +142,6 @@ def __init__(self, *args, **kwargs):

self.pyshortver = '.'.join(self.version.split('.')[:2])

# Used for EBPYTHONPREFIXES handler script
self.pythonpath = os.path.join(log_path(), 'python')

ext_defaults = {
# Use PYPI_SOURCE as the default for source_urls of extensions.
'source_urls': [PYPI_SOURCE],
Expand Down Expand Up @@ -481,6 +478,10 @@ def build_step(self, *args, **kwargs):

super(EB_Python, self).build_step(*args, **kwargs)

@property
def site_packages_path(self):
return os.path.join('lib', 'python' + self.pyshortver, 'site-packages')

def install_step(self):
"""Extend make install to make sure that the 'python' command is present."""

Expand All @@ -504,7 +505,7 @@ def install_step(self):
symlink('pip' + self.pyshortver, pip_binary_path, use_abspath_source=False)

if self.cfg.get('ebpythonprefixes'):
write_file(os.path.join(self.installdir, self.pythonpath, 'sitecustomize.py'), SITECUSTOMIZE)
write_file(os.path.join(self.installdir, self.site_packages_path, 'sitecustomize.py'), SITECUSTOMIZE)

# symlink lib/python*/lib-dynload to lib64/python*/lib-dynload if it doesn't exist;
# see https://github.com/easybuilders/easybuild-easyblocks/issues/1957
Expand All @@ -525,16 +526,15 @@ def install_step(self):
def _sanity_check_ebpythonprefixes(self):
"""Check that EBPYTHONPREFIXES works"""
temp_prefix = tempfile.mkdtemp(suffix='-tmp-prefix')
site_packages_path = os.path.join('lib', 'python' + self.pyshortver, 'site-packages')
temp_site_packages_path = os.path.join(temp_prefix, site_packages_path)
temp_site_packages_path = os.path.join(temp_prefix, self.site_packages_path)
mkdir(temp_site_packages_path, parents=True) # Must exist
res = run_shell_cmd("%s=%s python -c 'import sys; print(sys.path)'" % (EBPYTHONPREFIXES, temp_prefix))
out = res.output.strip()
# Output should be a list which we can evaluate directly
if not out.startswith('[') or not out.endswith(']'):
raise EasyBuildError("Unexpected output for sys.path: %s", out)
paths = eval(out)
base_site_packages_path = os.path.join(self.installdir, site_packages_path)
base_site_packages_path = os.path.join(self.installdir, self.site_packages_path)
try:
base_prefix_idx = paths.index(base_site_packages_path)
except ValueError:
Expand Down Expand Up @@ -635,12 +635,3 @@ def sanity_check_step(self):
raise EasyBuildError("Expected to find exactly one _tkinter*.so: %s", tkinter_so_hits)

super(EB_Python, self).sanity_check_step(custom_paths=custom_paths, custom_commands=custom_commands)

def make_module_extra(self, *args, **kwargs):
"""Add path to sitecustomize.py to $PYTHONPATH"""
txt = super(EB_Python, self).make_module_extra()

if self.cfg.get('ebpythonprefixes'):
txt += self.module_generator.prepend_paths(PYTHONPATH, self.pythonpath)

return txt

0 comments on commit ca29703

Please sign in to comment.