仅在未安装的情况下安装Racket包

时间:2017-01-27 22:00:21

标签: package racket

我可以安装一个Racket包:

show()

如果未安装软件包,则会安装它。如果已经安装了软件包,则会抱怨软件包已经安装。虽然这很好,有没有更好的方法来检查是否已安装软件包,并且只有在尚未安装软件包时才尝试安装它?

对于上下文,我想要这个,因为我有一个(非包)Racket项目依赖于正在安装的某些包。我可以将它们放在一个info.rkt文件中,但据我所知,除非我尝试将项目作为一个软件包安装,否则这些文件将无法安装,这对该域名没有意义。

那么,无论如何确定是否安装了Racket包?另外,如果软件包尚未安装,我是否可以使用此信息进行安装?

1 个答案:

答案 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