使用 Quicklisp 管理三方库

Table of Contents

Quicklisp 是 Common Lisp 平台的包管理器,类似于 Python 中的 pip。目前官方已收录了 1000 个以上的三方库(可见 Common Lisp 的库并不少),多数包都可以运行在多种 Common Lisp 的实现上。

术语:

Quicklisp 和 ASDF 的区别:

简单来说,ASDF 定义一个 system,这个 system 会有多个源码文件,这些文件之间存在依赖关系,比如 b.lisp 依赖 a.lisp,ASDF 就是用来解决这种依赖的。而 Quicklisp 除了自动管理 system,还可以解决 system 之间的依赖关系,比如 restas 依赖 hunchentoot,在安装 restas 时,也会自动安装 hunchentoot。

1. Quicklisp

通常你的 Common Lisp 实现中是没有自带 Quicklisp 的,所以需要去官方(http://www.quicklisp.org/beta/) 下载并手动安装。在官方网站找到 http://beta.quicklisp.org/quicklisp.lisp, 将它下载到本地,然后启动一个 Common Lisp 实现,并加载 quicklisp.lisp,比如在 SBCL 里:

$ sbcl --load quicklisp.lisp

然后在 REPL 中安装 Quicklisp:

(quicklisp-quickstart:install)

接着需要让 SBCL 启动的时候自动加载 Quicklisp,这样才可以随时用 Quicklisp 安装三方库:

(ql:add-to-init-file)

完毕之后就可以用 Quicklisp 来安装三方库了,这里列举了全部的库名: http://www.quicklisp.org/beta/releases.html 。要安装哪个库,在 REPL 下调用 ql:quickload 函数即可,Quicklisp 会自动下载并 load 这个库的。比如安装 restas:

(ql:quickload "restas")

如果要搜索某个包,比如要搜索 MongoDB 相关的包,使用 ql:system-apropos 函数:

(ql:system-apropos "mongo")
    #<SYSTEM cl-mongo / cl-mongo-20131003-git / quicklisp 2014-05-25>
    #<SYSTEM cl-mongo-id / cl-mongo-id-20130128-git / quicklisp 2014-05-25>
    #<SYSTEM twitter-mongodb-driver / cl-twitter-20131003-git / quicklisp 2014-05-25>

要卸载库,调用 ql:uninstall。如卸载 restas:

(ql:uninstall "restas")

调用 ql:update-all-dists 可以升级本地已安装的库:

(ql:update-all-dists)

2. 安装在多个 Common Lisp 实现中

安装了一次 Quicklisp 之后,可以让它共享在系统里多种 Common Lisp 中,在其他 CL 实现中加载 Quicklisp:

(load "~/quicklisp/setup.lisp")

执行 ql:add-to-init-file,会自动把配置信息写入到对应的启动初始化文件中:

(ql:add-to-init-file)

重启 REPL 即可。

3. 配置 Ultralisp

Ultralisp 完全兼容 Quicklisp,源中的库更新更快,按官方提供的方法配置即可。

官网:https://ultralisp.org/

另外,Ultralisp 的搜索很棒。