unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
* usage of guix import / adding a package
@ 2020-07-16 22:10 Zelphir Kaltstahl
  2020-07-16 22:27 ` Julien Lepiller
  0 siblings, 1 reply; 5+ messages in thread
From: Zelphir Kaltstahl @ 2020-07-16 22:10 UTC (permalink / raw)
  To: help-guix

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

-- 
repositories: https://notabug.org/ZelphirKaltstahl


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: usage of guix import / adding a package
  2020-07-16 22:10 usage of guix import / adding a package Zelphir Kaltstahl
@ 2020-07-16 22:27 ` Julien Lepiller
  2020-10-12 17:43   ` Zelphir Kaltstahl
  0 siblings, 1 reply; 5+ messages in thread
From: Julien Lepiller @ 2020-07-16 22:27 UTC (permalink / raw)
  To: Zelphir Kaltstahl; +Cc: help-guix

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:

python-mypy

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!


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: usage of guix import / adding a package
  2020-07-16 22:27 ` Julien Lepiller
@ 2020-10-12 17:43   ` Zelphir Kaltstahl
  2020-10-13  6:25     ` Efraim Flashner
  0 siblings, 1 reply; 5+ messages in thread
From: Zelphir Kaltstahl @ 2020-10-12 17:43 UTC (permalink / raw)
  To: Julien Lepiller; +Cc: help-guix

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


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: usage of guix import / adding a package
  2020-10-12 17:43   ` Zelphir Kaltstahl
@ 2020-10-13  6:25     ` Efraim Flashner
  2020-10-13 19:44       ` Zelphir Kaltstahl
  0 siblings, 1 reply; 5+ messages in thread
From: Efraim Flashner @ 2020-10-13  6:25 UTC (permalink / raw)
  To: Zelphir Kaltstahl; +Cc: help-guix

[-- Attachment #1: Type: text/plain, Size: 10899 bytes --]

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 #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: usage of guix import / adding a package
  2020-10-13  6:25     ` Efraim Flashner
@ 2020-10-13 19:44       ` Zelphir Kaltstahl
  0 siblings, 0 replies; 5+ messages in thread
From: Zelphir Kaltstahl @ 2020-10-13 19:44 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: help-guix

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



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-10-13 19:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-16 22:10 usage of guix import / adding a package Zelphir Kaltstahl
2020-07-16 22:27 ` Julien Lepiller
2020-10-12 17:43   ` Zelphir Kaltstahl
2020-10-13  6:25     ` Efraim Flashner
2020-10-13 19:44       ` Zelphir Kaltstahl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).