为了保持一个正常的工作环境,你会发现在不实际安装的情况下测试本地源码树签出中的更改是非常有用的。这样你可以更好地区分自己作为“最终用户”和“测试员”的角色。
这样,即使你没有运行 make install
,所有的命令行工具都可以使用。为此,你先要有一个全部依赖都可用的环境(see 从 Git 构建),然后简单地为每个命令添加前缀 ./pre-inst-env
(pre-inst-env 脚本在
Guix 构建树的最顶层,see 从 Git 构建来生成它)。作为例子,以下是你如何构建 hello
包,如同在你的工作树中定义的那样(这假设了 guix-daemon
正在运行于你的系统上;如果是不同的版本也可以):
$ ./pre-inst-env guix build hello
类似地,一个使用 Guix 模块的 Guile 会话的例子:
$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))' ;;; ("x86_64-linux")
… 以及为了一个 REPL(see 交互式使用 Guix):
$ ./pre-inst-env guile scheme@(guile-user)> ,use(guix) scheme@(guile-user)> ,use(gnu) scheme@(guile-user)> (define snakes (fold-packages (lambda (package lst) (if (string-prefix? "python" (package-name package)) (cons package lst) lst)) '())) scheme@(guile-user)> (length snakes) $1 = 361
如果你在折腾守护进程及其支持代码,或者 guix-daemon
尚未在系统中运行,你可以直接从构建树中启动它45:
$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild
pre-inst-env
脚本设置好了为了支持这个的所有必要的环境变量,包括 PATH
和
GUILE_LOAD_PATH
。
注意,./pre-inst-env guix pull
不会更新本地源代码树;它只是简单地更新
~/.config/guix/current 符号链接(see Invoking guix pull
)。如果你想更新本地源码树,请运行 git pull
。
有时,特别是刚刚更新过你的仓库时,运行 ./pre-inst-env
将会打印一个消息,类似于下面的例子:
;;; note: source file /home/user/projects/guix/guix/progress.scm ;;; newer than compiled /home/user/projects/guix/guix/progress.go
这仅仅是一个提示,你可以安全地忽略它,可以通过运行 make -j4
来避免这条消息。若你不这么做,Guile
就会运行的稍微慢一些,因为它会解释代码而不是使用预备的 Guile 对象 (.go) 文件。
你可以使用 watchexec
包中的 watchexec
在你干活时自动运行
make
。例如,若要在每次更新一个包文件后都再次构建,运行‘watchexec -w gnu/packages --
make -j4’。