bug-guix
[Top][All Lists]
Advanced

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

bug#62448: Inconsistent guile enviornment from guix shell


From: Skyler
Subject: bug#62448: Inconsistent guile enviornment from guix shell
Date: Wed, 29 Mar 2023 21:23:38 +0000

Hello again,

I did some more digging, and it looks like the issue is that guile also has to be specified in the shell environment. I suppose this is reasonable, because the result of the shell environment should not depend on the calling environment, and the existence of guile in the environment is what tells guix that the variables need to be set. The load path is set with the -D flag because guile is a non-propagated input to the package, so it exists in the development shell environment automatically, but not in an ad-hoc environment.

I determined this by trying variations of the shell command in test users with clean environments, one of them including a home environment because I thought that might be a factor. There was no change based on whether the user had a home environment installed, but both users experienced the problem when guile was not included in the shell command. Incidentally, using the pure or container flags always works, because guile must be specified regardless of the calling environment in those cases, but I don't think it is immediately obvious why those flags "make it work".

In spite of being reasonable, it is not particularly intuitive. Could I recommend an addition to the manual in section "7.1 Invoking guix-shell", adding text like the below after the example invocation `guix shell python python-numpy -- python3​`?

"Note that it is necessary to include the main python package in this command even if it is already installed into your environment. This is so that the shell environment knows to set PYTHONPATH and other related variables. The shell environment cannot check the previously installed environment, because then it would be non-deterministic."

Thanks,
Skyler
------- Original Message -------
On Saturday, March 25th, 2023 at 12:10 PM, Skyler <skyvine@protonmail.com> wrote:

Hello,

The modules available in a guile REPL seem to be inconsistent after running the guix shell command, where using the -D flag to create a development environment behaves as expected, but leaving out that flag to add the package itself to the environment does not. I am experiencing this issue with some random code on my machine, but I will use guile-pubstrate defined in guix code (https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/guile-xyz.scm?id=04724e59971b03f86a410285653d24005c62b924#n340) as an example for reproduction. Note that guile-pubstrate lists guile-webutils as a propagated input.

When I use guix shell -D guile-pubstrate​, I am able to import the (webutils bytevectors)​ module, as I would expect. I am not able to import (pubstrate apclient)​, also as I would expect. Inspecting GUILE_LOAD_PATH shows that a new profile path was added which contains the dependencies:

$ guix shell -D guile-pubstrate --check
guix shell: checking the environment variables visible from shell '/gnu/store/d99ykvj3axzzidygsmdmzxah4lvxd6hw-bash-5.1.8/bin/bash'...
guix shell: All is good!  The shell gets correct environment variables.
[env]$ guile
GNU Guile 3.0.7
Copyright (C) 1995-2021 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)> (use-modules (webutils bytevectors))
scheme@(guile-user)> (use-modules (pubstrate apclient))
While compiling _expression_:
no code for module (pubstrate apclient)
scheme@(guile-user)> ,q
[env]$ echo $GUILE_LOAD_PATH
/gnu/store/pr4vyrz2xsziv25hrdfyim0wy331p4z5-profile/share/guile/site/3.0:/run/current-system/profile/share/guile/site/3.0:/home/skyler/.guix-profile/share/guile/site/3.0
$ ls /gnu/store/pr4vyrz2xsziv25hrdfyim0wy331p4z5-profile/share/guile/site/3.0
8sync      apicheck.scm  config     debugging  fibers      gcrypt    gnutls      graph         io       match-bind.scm  md5.scm  rx      search  sjson.scm  term     text           web
8sync.scm  compat        container  fash.scm   fibers.scm  gdbm.scm  gnutls.scm  htmlprag.scm  logging  math            os       scheme  sjson   string     texinfo  unit-test.scm  webutils

However, when I use guix shell guile-pubstrate, neither (webutils bytevectors) nor (pubstrate apclient) are available. I would expect both of them to be, the former because it is a propagated input and the latter because it is the package that was directly added. If guile was able to locate pubstrate's modules, I would expect loading to fail because its runtime dependencies are not available. Inspecting GUILE_LOAD_PATH shows that nothing was added to it:

$ guix shell guile-pubstrate --check
guix shell: checking the environment variables visible from shell '/gnu/store/d99ykvj3axzzidygsmdmzxah4lvxd6hw-bash-5.1.8/bin/bash'...
guix shell: All is good!  The shell gets correct environment variables.
[env]$ guile
GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)> (use-modules (webutils bytevectors))
While compiling _expression_:
no code for module (webutils bytevectors)
scheme@(guile-user)> (use-modules (pubstrate apclient))
While compiling _expression_:
no code for module (pubstrate apclient)
scheme@(guile-user)> ,q
[env]$ echo $GUILE_LOAD_PATH
/run/current-system/profile/share/guile/site/3.0:/home/skyler/.guix-profile/share/guile/site/3.0

This is not an issue with the guile-pubstrate definition in particular, because guix shell guile-webutils also fails to add its modules to my environment:

$ guix shell --check guile-webutils
The following derivation will be built:
  /gnu/store/ca8gv3yk2khs0h60kc5v682g7gvfqd23-profile.drv

building CA certificate bundle...
listing Emacs sub-directories...
building fonts directory...
building directory of Info manuals...
building profile with 1 package...
guix shell: checking the environment variables visible from shell '/gnu/store/d99ykvj3axzzidygsmdmzxah4lvxd6hw-bash-5.1.8/bin/bash'...
guix shell: All is good!  The shell gets correct environment variables.
[env]$ guile
GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)> (use-modules (webutils bytevectors))
While compiling _expression_:
no code for module (webutils bytevectors)

My machine is up-to-date as of today:

Generation 32 Mar 25 2023 11:32:38 (current)
  guix 04724e5
    branch: master
    commit: 04724e59971b03f86a410285653d24005c62b924
  rde a7b5944
    repository URL: https://git.sr.ht/~abcdw/rde
    branch: master
    commit: a7b59443405169600a00f0b295a3fb1de360cb0b

Let me know if there is anything I can do to help diagnose or fix this issue.

Thanks,
Skyler


reply via email to

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