Phil writes: > Hi, > > It seems standard not to declare python2 or python3 as a dependency on > python package definitions - however other dependent python libraries are stated. > > eg python-scipy will declare dependencies on python-numpy and > python-matplotlib - but not on a specific version of python package > required to use it. > > I'm guessing this is to avoid tying packages to specific python > releases, but I'm curious about the mechanics. Build systems are a mechanic to deduplicate common steps, but also common inputs between packages, and the python-build-system will include a default Python as an input. https://git.savannah.gnu.org/cgit/guix.git/tree/guix/build-system/python.scm#n138 > It looks like 'package-with-python2' might be used to allow us to > distinguish between python2 and python3, but ignoring the python2 case, > I have the following python3 questions: > > Can we can install python-scipy without installing python3, given python > isn't an explicit dependency in the package? Guix packages don't have dependencies like other package managers, there's propagated-inputs which can act like dependencies where Guix will attempt to add propagated inputs to the profile when you install a package. But generally "dependencies" as in other things you should have when you have a given store item, are just references between store items: → guix gc --references /gnu/store/jj1915czcy6wlf6riajapl1j6dfgwwii-python-scipy-1.3.2 /gnu/store/01b4w3m6mp55y531kyi1g8shh722kwqm-gcc-7.5.0-lib /gnu/store/741057r2x06zwg6zcmqmdyv51spm6n9i-gfortran-7.5.0-lib /gnu/store/bs9pl1f805ins80xaf4s3n35a0x2lyq3-openblas-0.3.9 /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31 /gnu/store/h8jw9qhyfp6fm6nb3cgh4335qhr31wfz-python-wrapper-3.8.2 /gnu/store/jj1915czcy6wlf6riajapl1j6dfgwwii-python-scipy-1.3.2 /gnu/store/jxx8fr78jrcvpid5aplmkplbm1dk6czs-python-3.8.2 → grep -r jxx8fr78jrcvpid5aplmkplbm1dk6czs /gnu/store/jj1915czcy6wlf6riajapl1j6dfgwwii-python-scipy-1.3.2 Binary file /gnu/store/jj1915czcy6wlf6riajapl1j6dfgwwii-python-scipy-1.3.2/lib/python3.8/site-packages/scipy/optimize/_zeros.cpython-38-x86_64-linux-gnu.so matches ... So, you can't have this particular python-scipy output in your store without python as well, as it's referenced by some shared libraries, which I guess makes sense. > Which site-packages directory under what python3 version will be used? > A quick check looks that /path/to/profile/lib/python3.8/site-packages is > currently used but what makes the decision to put them under python3.8 - > especially if python3.8 isn't installed in the profile? The python build system takes care of where files end up in the package outputs at least: https://git.savannah.gnu.org/cgit/guix.git/tree/guix/build/python-build-system.scm#n38 > What happens if Guix upgrades python3 from 3.8 -> 3.9? How are packages > already installed under the 3.8, moved to the new 3.9 python version, is this seamless? When the default python version is changed, the build system will change accordingly. > If I'm using Guix on top of a foreign distro and don't have python3 > installed as part of Guix, will my python-scipy end-up installed for my > foreign distro's python install? Installing Guix things is just ensuring things are in the /gnu/store, plus maybe some environment variables for the profile. So it won't end up where your (not Guix) distro installs Python things at least. Hope that helps! Chris