【问题标题】:Install Racket package only if not installed仅在未安装时安装 Racket 包
【发布时间】:2017-01-27 22:00:21
【问题描述】:

我可以安装 Racket 包:

raco pkg install <pkg-name>

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

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

那么,有没有办法确定是否安装了 Racket 包?此外,我可以使用此信息仅安装尚未安装的包吗?

【问题讨论】:

    标签: package racket


    【解决方案1】:

    是的,事实上你可以。如果您使用的是 shell 程序或 ma​​kefile(基本上,使用命令行中的 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))
    

    我应该注意,包数据库在搜索密钥和安装包之间可能会发生变化。如果这对您很重要,请查看with-pkg-lock

    【讨论】:

      猜你喜欢
      • 2020-06-14
      • 2016-04-23
      • 1970-01-01
      • 2022-10-17
      • 2019-07-25
      • 1970-01-01
      • 2016-12-13
      • 2018-02-28
      • 1970-01-01
      相关资源
      最近更新 更多