Hi Mathieu, [...]
> I think the issue here lies in the sitecustomize.py file introduced with > cb72f9a773e0931ee3758c851d96007ded034e4c. > > python_root = os.path.realpath(sys.executable).split('/bin/')[0] > > > When using the Python C library, sys.executable is not the expected > python binary but the test binary. > > So when we try to find the associated libraries in the Python search > path, this way: > > index = sys_path_absolute.index(python_site) > sys.path = sys.path[:index] + matching_sites + sys.path[index:] > > > we get: > > ValueError: '/home/mathieu/glade-3.38.2/build/lib/python3.9/site-packages' is > not in list > > > Running the test with the PYTHONPATH set to: > > PYTHONPATH=/home/mathieu/glade-3.38.2/build/lib/python3.9/site-packages:$PYTHONPATH > > > is a way to work around this issue. > > The fix here would be to replace sys.executable in the sitecustomize.py > with something more adequate, but I have no idea what could it be. >From the doc [0], sys.prefix seems to be more correct. This had been suggested by Hartmut some time ago and I had this patch ready recently. Perhaps it already addresses the issue at hand? You'll find it attached. It hasn't gotten much testing yet. [0] https://docs.python.org/3/library/sys.html#sys.prefix
>From e693b38a6d5c370e13f795c6303f50871ec78ae4 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer <maxim.courno...@gmail.com> Date: Tue, 3 Aug 2021 20:41:20 -0400 Subject: [PATCH] aux-files: sitecustomize: Cleanup and add explanatory comments. * gnu/packages/aux-files/python/sitecustomize.py: Add a comment explaining the general idea. (major_minor): Use the unpacking operator (*) to provide the arguments. (site_packages_prefix): Use os.path.join to form the path. (python_site): Likewise. (all_sites_raw): Split on os.path.pathsep. (sys.path): Directly splice the result in the list. Suggested-by: Hartmut Goebel <h.goe...@crazy-compilers.com> --- .../aux-files/python/sitecustomize.py | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/gnu/packages/aux-files/python/sitecustomize.py b/gnu/packages/aux-files/python/sitecustomize.py index 65d3c7d554..71e328b9ac 100644 --- a/gnu/packages/aux-files/python/sitecustomize.py +++ b/gnu/packages/aux-files/python/sitecustomize.py @@ -20,13 +20,26 @@ import os import sys -python_root = os.path.realpath(sys.executable).split('/bin/')[0] -major_minor = '{}.{}'.format(sys.version_info[0], sys.version_info[1]) -site_packages_prefix = 'lib/python' + major_minor + '/site-packages' -python_site = python_root + '/' + site_packages_prefix +# Commentary: +# +# Site-specific customization for Guix. +# +# The program below honors the GUIX_PYTHONPATH environment variable to +# discover Python packages. File names appearing in this variable that match +# a predefined versioned installation prefix are added to the sys.path. To be +# considered, a Python package must be installed under the +# 'lib/pythonX.Y/site-packages' directory, where X and Y are the major and +# minor version numbers of the Python interpreter. +# +# Code: + +major_minor = '{}.{}'.format(*sys.version_info) +site_packages_prefix = os.path.join( + 'lib', 'python' + major_minor, 'site-packages') +python_site = os.path.join(sys.prefix, site_packages_prefix) try: - all_sites_raw = os.environ['GUIX_PYTHONPATH'].split(':') + all_sites_raw = os.environ['GUIX_PYTHONPATH'].split(os.path.pathsep) except KeyError: all_sites_raw = [] # Normalize paths, otherwise a trailing slash would cause it to not match. @@ -35,7 +48,8 @@ matching_sites = [p for p in all_sites_norm if p.endswith(site_packages_prefix)] # Insert sites matching the current version into sys.path, right before -# Python's own site. +# Python's own site. This way, the user can override the libraries provided +# by Python itself. sys_path_absolute = [os.path.realpath(p) for p in sys.path] index = sys_path_absolute.index(python_site) -sys.path = sys.path[:index] + matching_sites + sys.path[index:] +sys.path[index:index] = matching_sites -- 2.32.0