help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: usage of guix import / adding a package


From: Efraim Flashner
Subject: Re: usage of guix import / adding a package
Date: Tue, 13 Oct 2020 09:25:39 +0300

On Mon, Oct 12, 2020 at 07:43:56PM +0200, Zelphir Kaltstahl wrote:
> Hello Julien!
> 
> I think I did not yet reply to your e-mail yet. I put it off to "later"
> and now it is much later. Sorry for my late reply and thank you for the
> information already provided.
> 
> Meanwhile I have come across another case, where I would like to install
> a package from PyPI and where I do not know how to proceed:
> 
> This time I have a more reproducible scenario using channels as well.
> 
> I have a `channels.scm` file:
> 
> ~~~~
> (list (channel
>         (name 'guix)
>         (url "https://git.savannah.gnu.org/git/guix.git";)
>         (commit
>           "29a2eb36ff85eb75eeb907aa687fbb655b5f1097")
>         (introduction
>           (make-channel-introduction
>             "9edb3f66fd807b096b48283debdcddccfea34bad"
>             (openpgp-fingerprint
>               "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA")))))
> ~~~~
> 
> A `manifest.scm` file:
> 
> ~~~~
> (specifications->manifest
>  '("python"
>    "python-django"))
> ~~~~
> 
> And I have a `django-mptt.scm` file, created using `guix import pypi
> --recursive django-mptt` and by adding required imports and expressions
> at the bottom for actually returning something, as indicated by comments:
> 

Replying a bit out of order, the error below means it doesn't know what
"python-django" is. 'guix package -A python-django' shows that the
package definition exists in gnu/packages/django.scm

> ~~~~
> ;; add module imports
> (use-modules
>  (guix packages)
>  (guix download)
>  (guix build-system python)

   (gnu packages django)

>  ((guix licenses) #:prefix license:))
> 
> (define-public python-django-js-asset
>   (package
>     (name "python-django-js-asset")
>     (version "1.2.2")
>     (source
>       (origin
>         (method url-fetch)
>         (uri (pypi-uri "django-js-asset" version))
>         (sha256
>           (base32
>             "0q3j2rsdb2i7mvncy9z160cghcggvk87q14qnn7jvcp0sa0awqy1"))))
>     (build-system python-build-system)
>     (home-page
>       "https://github.com/matthiask/django-js-asset/";)
>     (synopsis
>       "script tag with additional attributes for django.forms.Media")
>     (description
>       "script tag with additional attributes for django.forms.Media")
>     (license license:bsd-3)))
> 
> (define-public python-django-mptt
>   (package
>     (name "python-django-mptt")
>     (version "0.11.0")
>     (source
>       (origin
>         (method url-fetch)
>         (uri (pypi-uri "django-mptt" version))
>         (sha256
>           (base32
>             "1a4m32yb85bamfpjrg4r1ywz4x21az44wm5hb12dsz6jbbvkmnyz"))))
>     (build-system python-build-system)
>     (propagated-inputs
>       `(("python-django" ,python-django)
>         ("python-django-js-asset"
>          ,python-django-js-asset)))
>     (home-page
>       "https://github.com/django-mptt/django-mptt";)
>     (synopsis
>       "Utilities for implementing Modified Preorder Tree Traversal with your 
> Django Models and working with trees of Model instances.")
>     (description
>       "Utilities for implementing Modified Preorder Tree Traversal with your 
> Django Models and working with trees of Model instances.")
>     (license license:expat)))
> 
> ;; add result expression
> python-django-mptt
> ~~~~
> 
> Then to make an environment I do the following:
> 
> ~~~~
> guix time-machine --channels=channels.scm -- environment 
> --load=django-mptt.scm --manifest=manifest.scm
> ~~~~
> 
> Which results in:
> 
> ~~~~
> ... (happily downloading and building stuff here) ...
> 
> Backtrace:
>           17 (primitive-load "/home/xiaolong/.cache/guix/inferiors/s…")
> In guix/ui.scm:
>   2115:12 16 (run-guix-command _ . _)
> In ice-9/boot-9.scm:
>   1736:10 15 (with-exception-handler _ _ #:unwind? _ # _)
>   1731:15 14 (with-exception-handler #<procedure 7f32cc07a120 at ic…> …)
>   1736:10 13 (with-exception-handler _ _ #:unwind? _ # _)
> In guix/store.scm:
>    631:37 12 (thunk)
>    1300:8 11 (call-with-build-handler #<procedure 7f32cc0bca80 at g…> …)
> In guix/status.scm:
>     776:4 10 (call-with-status-report _ _)
> In guix/scripts/environment.scm:
>     345:4  9 (_)
> In srfi/srfi-1.scm:
>    673:15  8 (append-map _ _ . _)
>    586:29  7 (map1 _)
>    586:17  6 (map1 ((load package "django-mptt.scm") (system . "…") …))
> In guix/scripts/environment.scm:
>    126:37  5 (packages->outputs #<package python-django-mptt@0.11.0…> …)
> In guix/packages.scm:
>   1145:16  4 (package->bag _ _ _ #:graft? _)
>   1252:48  3 (thunk)
> In 
> /home/xiaolong/dev/guix/guix-package-manager-tutorials/django-example/django-mptt.scm:
>      29:2  2 (propagated-inputs _)
> In ice-9/boot-9.scm:
>   1669:16  1 (raise-exception _ #:continuable? _)
>   1669:16  0 (raise-exception _ #:continuable? _)
> 
> ice-9/boot-9.scm:1669:16: In procedure raise-exception:
> error: python-django: unbound variable
> ~~~~
> 
> Now this is the point, where I do not know how to continue. It seems I
> am quite close to get it working, just that somewhere I need to put
> `python-django`. Perhaps I need to add it to `django-mptt.scm`
> somewhere? But how would I specify 2 or more "exports" from that file?
> 
> If I try to write a list instead of only a non-compound value at the
> bottom of `django-mptt`, as follows:
> 
> ~~~~
> ... (more stuff before this as seen above) ...
> 
> ;; add result expression
> '(python-django-mptt python-django)
> ~~~~
> 
> I get the following:
> 
> ~~~~
> Backtrace:
>           16 (primitive-load "/home/xiaolong/.cache/guix/inferiors/s…")
> In guix/ui.scm:
>   2115:12 15 (run-guix-command _ . _)
> In ice-9/boot-9.scm:
>   1736:10 14 (with-exception-handler _ _ #:unwind? _ # _)
>   1731:15 13 (with-exception-handler #<procedure 7fa84988d8a0 at ic…> …)
>   1736:10 12 (with-exception-handler _ _ #:unwind? _ # _)
> In guix/store.scm:
>    631:37 11 (thunk)
>    1300:8 10 (call-with-build-handler #<procedure 7fa84988d210 at g…> …)
> In guix/status.scm:
>     776:4  9 (call-with-status-report _ _)
> In guix/scripts/environment.scm:
>     345:4  8 (_)
> In srfi/srfi-1.scm:
>    673:15  7 (append-map _ _ . _)
>    586:29  6 (map1 _)
>    586:17  5 (map1 ((load package "django-mptt.scm") (system . "…") …))
>    673:15  4 (append-map #<procedure 7fa84a2569c0 at guix/scripts/e…> …)
>    586:17  3 (map1 (python-django-mptt python-django))
> In guix/scripts/environment.scm:
>     331:4  2 (packages->outputs _ _)
> In ice-9/boot-9.scm:
>   1669:16  1 (raise-exception _ #:continuable? _)
>   1669:16  0 (raise-exception _ #:continuable? _)
> 
> ice-9/boot-9.scm:1669:16: In procedure raise-exception:
> Throw to key `match-error' with args `("match" "no matching pattern" 
> python-django-mptt)'.
> ~~~~
> 
> How do I get this working?
> 
> Best regards,
> Zelphir
> 
> On 7/17/20 12:27 AM, Julien Lepiller wrote:
> > Le Fri, 17 Jul 2020 00:10:36 +0200,
> > Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> a écrit :
> >
> >> Hello Guix Users!
> >>
> >> I read on
> >> https://guix.gnu.org/manual/en/html_node/Invoking-guix-import.html:
> >>
> >> "The guix import command is useful for people who would like to add a
> >> package to the distribution with as little work as possible—a
> >> legitimate demand. The command knows of a few repositories from which
> >> it can “import” package metadata. The result is a package definition,
> >> or a template thereof, in the format we know (see Defining Packages)."
> >>
> >> I've recently tried this, for example for MyPy:
> >>
> >> ~~~~
> >> guix import pypi -r mypy
> >> ~~~~
> >>
> >> This will result in Guile code printed to my terminal. However, I do
> >> not understand how to make use of that code. I do not understand how
> >> I can load it. For example I tried using the -l argument with guix
> >> environment:
> >>
> >> ~~~~
> >> guix import pypi -r mypy > additional_file.scm
> >> guix environment --pure --load=additional_file.scm --ad-hoc
> >> python@3.8.2 /home/user/dev/Python/additional_file.scm:2:2: error:
> >> package: unbound variable hint: Did you forget `(use-modules (guix
> >> packages))'? ~~~~
> >>
> >> So that seems to be the wrong way of trying to make use of it.
> >>
> >> Do I need to provide a patch to the project of the Guix package
> >> manager to add this to Guix packages in general and then be able to
> >> use it in my local setup?
> >>
> >> I do not find the info, how I can now use MyPy inside an environment
> >> or add it to the available packages on any of the following pages:
> >>
> >> -
> >> https://guix.gnu.org/manual/en/html_node/Python-Modules.html#Python-Modules
> >>
> >> - https://guix.gnu.org/manual/en/html_node/Invoking-guix-import.html
> >>
> >> While https://guix.gnu.org/manual/en/html_node/Submitting-Patches.html
> >> makes me think, that perhaps I need to submit it as patch to be able
> >> to use MyPy.
> >>
> >> If so, how would I test, whether guix import did its thing correctly?
> >> I could try running MyPy in an environment, but for that I would have
> >> to somehow make use of what guix import gives me, before submitting a
> >> patch.
> >>
> >> Also, if I need to submit a patch adding the guix import output
> >> somewhere, is there a guide on how to create such a patch for the Guix
> >> project?
> >>
> >> Regards,
> >> Zelphir
> >>
> > Hi zelphir,
> >
> > You don't need to send a patch, although it would be very welcome. You
> > should read
> > https://guix.gnu.org/manual/devel/en/html_node/Defining-Packages.html
> > where you can learn about package modules and how to import missing
> > modules that cause the issue you are having. Basically, you need a
> > header such as
> >
> > (use-modules (gnu) (guix packages))
> > etc...
> >
> > Then, you'll have to make sure your file returns something: guix import
> > -r will return you a code that defines one or more variables, but
> > nothing is returned. If you don't do anything, after adding the
> > required headers, you'll simply see an error about #<undefined>.
> >
> > Put the name of the package you want to build in its own line at the
> > very end of the file, like:
> >
> > pyhon-mypyt
> >
> >
> > this will ensure the value associated with that variable is returned
> > from the file, and you will be able to load the file with guix
> > environment -l or guix build -f.
> >
> > HTH!
> 
> -- 
> repositories: https://notabug.org/ZelphirKaltstahl
> 

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]