我可以安装一个Racket包:
show()
如果未安装软件包,则会安装它。如果已经安装了软件包,则会抱怨软件包已经安装。虽然这很好,有没有更好的方法来检查是否已安装软件包,并且只有在尚未安装软件包时才尝试安装它?
对于上下文,我想要这个,因为我有一个(非包)Racket项目依赖于正在安装的某些包。我可以将它们放在一个info.rkt文件中,但据我所知,除非我尝试将项目作为一个软件包安装,否则这些文件将无法安装,这对该域名没有意义。
那么,无论如何确定是否安装了Racket包?另外,如果软件包尚未安装,我是否可以使用此信息进行安装?
答案 0 :(得分:1)
是的,事实上你可以。如果您正在使用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>
或者,如果您正在寻找一个&#39; in Racket&#39;解决方案,您可以使用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))
我应该注意,在搜索密钥和安装软件包之间,软件包数据库很可能会发生变化。如果这对您很重要,请查看with-pkg-lock