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: Zelphir Kaltstahl
Subject: Re: usage of guix import / adding a package
Date: Mon, 12 Oct 2020 19:43:56 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

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:

~~~~
;; add module imports
(use-modules
 (guix packages)
 (guix download)
 (guix build-system python)
 ((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



reply via email to

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