我可以安装 Racket 包:
raco pkg install <pkg-name>
如果该软件包尚未安装,则会安装它。但是,如果该软件包已安装,它会提示该软件包已安装。虽然这很好,但有没有更好的方法来检查软件包是否已安装,并且仅在尚未安装时才尝试安装它?
对于上下文,我想要这个,因为我有一个(非包)Racket 项目,它依赖于正在安装的某些包。我可以将它们放入 info.rkt 文件中,但据我所知,除非我尝试将项目作为包安装,否则它们不会被安装,这对于该域来说没有意义。
那么,有没有办法确定是否安装了 Racket 软件包?此外,我可以使用此信息仅安装尚未安装的软件包吗?
最佳答案
是的,事实上你可以。如果您使用 shell 程序或 makefile(基本上是从命令行使用 raco pkg 工具),则可以向其传递 --skip-installed 参数。如果尚未安装该软件包,则只会尝试安装该软件包。所以你可以在 Mace 文件中执行类似的操作:
all: # Replace spaces here with tabs, because make...
raco pkg install --skip-installed <important-pkg>
<rest-of-makefile>
或者,如果您正在寻找“in Racket”解决方案,您可以使用 installed-pkg-table
函数获取包含所有已安装软件包的哈希表。从那里,很容易执行 hash-has-key?
来查看包是否在表中。从那里,您可以使用 pkg-install-command
安装软件包。您的总代码将如下所示:
(unless (hash-has-key? (installed-pkg-table) "<important-pkg>")
(pkg-install-command #:deps 'search-auto i))
我应该注意到,在搜索 key 和安装包之间,包数据库有可能会发生变化。如果这对您很重要,请查看with-pkg-lock
关于package - 仅在未安装时安装 Racket 软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903723/