如何在Racket中获取已安装软件包的版本号

时间:2019-12-16 22:54:21

标签: version racket

在Racket中,版本号存储在info.rkt中软件包的根目录中。该文件如下所示:

#lang info

....
(define version "0.5")

问题是,我如何以编程方式获取该软件包的版本?

version函数和库似乎专门针对Racket版本,而不是任何特定的软件包。

对于单个收集包,我可以使用get-info函数:

> ((get-info '("my-single-collection-package")) 'version)
"0.5"

但是,如果程序包中有多个集合,那就行不通了。

> ((get-info '("my-multi-collection-package")) 'version)
racket/racket/collects/racket/private/collect.rkt:11:53: collection-path: collection not found
  collection: "my-multi-collection-package"
  in collection directories:
   /home/leif/.racket/development/collects
   /home/leif/racket/racket/collects
   ... [216 additional linked and package directories]

那么我如何以编程方式从软件包中获取版本字符串?

1 个答案:

答案 0 :(得分:1)

您在正确的道路上。您仍然可以使用get-info从信息文件中检索数据,但是可以使用get-info/full,它允许您将路径传递到信息文件的目录。在这种情况下,包的基本目录。

要注意的是,您只需要找到文件包所在的文件夹即可。为此,您可以使用pkg-directory,它使用包的名称并返回其位置:

> (pkg-directory "my-pkg")
#<path:/home/leif/racket/racket/share/pkgs/my-pkg">

因此,您现在可以将其传递到get-info/full并将结果应用于'version以获取软件包的版本:

> ((get-info/full (pkg-directory "my-pkg")) 'version)
"0.5"
相关问题