Hi Guixers

I want to start again the discussion of converting propagated-inputs of
Python packages to normal inputs. I remembered that there was a
discussion once on the mailing list but I could not find it anymore.

The general idea to make propagated inputs, normal inputs is the
following: Every Python package hard codes it's inputs dependency paths
in a file in the site-packages directory (could also be in METADATA or
any other similar file). We add an additional finder to the import
machinery, either to sys.meta_path or sys.path_hooks or we modify the
existing PathFinder. The new or modified finder has one addition: if an
import happens from a package residing inside the guix store, it first
checks if the file or location of the hard coded dependecies are present
and loads the module from there before processing with the standard
import process.

I think the actual difficult part is to single out imports coming from
files inside the store and than finding the package root to lookup the
hardcoded dependency paths and to make this process somewhat fast
(although once the module is loaded, we can rely on the caching of
sys.modules). The hooking into the import needs to be patched for each
Python version we support (probably somewhere here [0]) but it may not
be that immersive.

What do you think? This needs probably a GCD if we ever want to go this
path, but I am not sure if this suggestion is completely wrong or maybe
undesired or was already suggested and discarded.

Best,
Reza

[0] 
https://github.com/python/cpython/blob/main/Lib/importlib/_bootstrap_external.py

Reply via email to