Hi Kyle, Have you looked at the (package-input-rewriting) procedure described towards the bottom of "Defining Package Variants"[1]? You might also like to look at the not-exported (package-with-explicit-python) proc defined in guix/build-system/python.scm[2]. It is used to produce python2 variants of packages but I suppose it would also work for swapping the minor versions of python3. Good luck with your task :) Wojtek [1] https://guix.gnu.org/manual/en/html_node/Defining-Package-Variants.html [2] https://git.savannah.gnu.org/cgit/guix.git/tree/guix/build-system/python.scm?id=b544f460989a6189af111bb3ff6752cabdf23abc#n82 -- (sig_start) website: https://koszko.org/koszko.html PGP: https://koszko.org/key.gpg fingerprint: E972 7060 E3C5 637C 8A4F 4B42 4BC5 221C 5A79 FD1A ♥ R29kIGlzIHRoZXJlIGFuZCBsb3ZlcyBtZQ== | ÷ c2luIHNlcGFyYXRlZCBtZSBmcm9tIEhpbQ== ✝ YnV0IEplc3VzIGRpZWQgdG8gc2F2ZSBtZQ== | ? U2hhbGwgSSBiZWNvbWUgSGlzIGZyaWVuZD8= -- (sig_end) On Fri, 17 Feb 2023 21:27:39 +0000 Kyle Andrews wrote: > Dear Guix, > > I want to use the python-apted package in my manifest. That package is > not in Guix, but can readily be fetched from: > > ``` > guix import pypi APTED > python-apted.scm > ``` > > I just had to prefix the following modules to turn that into a package > definition as well as a manifest. > > ``` > (use-modules (guix packages) > (guix download) > (guix licenses) > (guix profiles) > (gnu packages) > (guix build-system python)) > ``` > > During my original testing of my scientific workflow I discovered that > there was a bug introduced to the APTED package which was caused by a > change in how python worked under the hood. As a result, the APTED > package only advertises compatibility with python versions less than > 3.7. So, I would like to use python 3.6 to be on the safe side. > > I also want to include 60+ other packages in my manifest which are > "current" with the Guix repository and included within it. For > situations like this it would be really convenient if it were possible > to pass a version of python to python-build-system. Then, I hope all I > would have to do is pass another another defined variant of the python > package (e.g. called python-3.6) into that build-system argument. > > For example: > > ``` > (build-system python-build-system #:python python-3.6) > ``` > > That would be quite convenient and in line with the level of complexity > I was faced with when I took the conda approach before trying to use > Guix. Unfortunately, this functionality doesn't seem to be provided out > of box and I am seeking help in the hopes that there is an easy way to > do it. > > Am I thinking about this right? > > Thanks, > Kyle > > P.S. > > APTED claims to also be able to run on top of python-2.7 so maybe that > fact could be used to simplify this specific issue. I just wanted to > discuss the general problem first because I really want Guix to gain > broad traction within the scientific community. > > P.P.S. > > Here is a pretend manifest where I would love guidance on how to make > python-apted get built in the context of python-2.7 or ideally > python-3.6 even though the latest version of python is python-3.9 (where > APTED doesn't always work). > > ``` > (use-modules (guix packages) > (guix download) > (guix licenses) > (guix profiles) > (gnu packages) > (guix build-system python)) > > (define-public python-apted > (package > (name "python-apted") > (version "1.0.3") > (source (origin > (method url-fetch) > (uri (pypi-uri "apted" version)) > (sha256 > (base32 > "1sawf6s5c64fgnliwy5w5yxliq2fc215m6alisl7yiflwa0m3ymy")))) > (build-system python-build-system) > (arguments '(#:tests? #f)) > (home-page "https://github.com/JoaoFelipe/apted") > (synopsis "APTED algorithm for the Tree Edit Distance") > (description "APTED algorithm for the Tree Edit Distance") > (license expat))) > > (concatenate-manifests > (list (specifications->manifest (list "r" "r-dplyr" "r-reticulate")) > (packages->manifest (list python-apted)))) > ``` >