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: Tue, 13 Oct 2020 21:44:17 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

Thank you Efraim, that was the missing bit.

Any idea, why Guix cannot write those imports itself? Doesn't it already
know about them, as dependencies of python-django-mptt, as defined in
the setup.py file
https://github.com/django-mptt/django-mptt/blob/master/setup.py?

On 10/13/20 8:25 AM, Efraim Flashner wrote:
> 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
>>
-- 
repositories: https://notabug.org/ZelphirKaltstahl




reply via email to

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