如何使用较旧版本的gregor软件包?

时间:2019-02-28 19:13:13

标签: racket

这里是模拟它的方法。

$ cat t1.rkt
#lang racket/base
(require gregor)
(display "hello")

我正在运行球拍6.12。但是Racket 7.2也是如此。

$ racket t1.rkt
explode-path: contract violation
  expected: (or/c path-for-some-system? path-string?)
  given: #f
  context...:
   /usr/share/racket/collects/racket/path.rkt:116:0: do-explode-path
   /usr/share/racket/collects/racket/path.rkt:126:0: find-relative-path7
   /home/me/.racket/6.12/pkgs/tzinfo/tzinfo/private/zoneinfo.rkt:118:2: for-loop
   /home/me/.racket/6.12/pkgs/tzinfo/tzinfo/private/zoneinfo.rkt:108:0: read-tzids
   /home/me/.racket/6.12/pkgs/tzinfo/tzinfo/private/zoneinfo.rkt:71:0: make-zoneinfo-source
   /usr/share/racket/collects/racket/contract/private/arrow-val-first.rkt:388:18
   /home/me/.racket/6.12/pkgs/tzinfo/tzinfo/main.rkt:63:0: system-tzid
   /usr/share/racket/collects/racket/contract/private/arrow-val-first.rkt:388:18
   /home/me/.racket/6.12/pkgs/gregor-lib/gregor/private/moment.rkt: [running body]
   /home/me/.racket/6.12/pkgs/gregor-lib/gregor/private/generics.rkt: [traversing imports]
   /home/me/.racket/6.12/pkgs/gregor-lib/gregor/private/clock.rkt: [traversing imports]
   /home/me/.racket/6.12/pkgs/gregor-lib/gregor/main.rkt: [traversing imports]
   /home/me/issue-gregor/t1.rkt: [traversing imports]

$ racket --version
Welcome to Racket v6.12.

如何返回到较旧的gregor版本?我使用raco pkg install gregor将其安装了此文件,并安装了其所有依赖项。

1 个答案:

答案 0 :(得分:1)

我是Gregor的作者。 (我通常不会在Stack Overflow上发布文章,甚至不使用它,但是John Clements引起了我的注意。)

这里有一个不幸的命名问题,因为tzdata似乎是提供常规zoneinfo文件的Ubuntu软件包的名称,也是Racket package的名称,提供这些文件。

gregor依赖于名为tzinfo的软件包。 tzinfo反过来有条件地取决于tzdata(Racket,而不是Ubuntu)。具体来说,它仅取决于Windows系统上的tzdata。这是因为我假设所有Unix系统都将具有zoneinfo文件。 (这几天从来没有发生过有人在没有Unix的情况下运行Unix的情况。)但是,肯定是tzinfo(因此gregor)无法工作,除非它可以找到zoneinfo文件。 / p>

也许我应该在显眼的警告下更新文档。我宁愿不要使tzinfo 无条件地依赖于tzdata(同样是Racket),因为大多数Unix系统已经具有必要的文件了,而且文件可能不适当使得gregor使用的版本不同于系统使用的版本。