使用Quicklisp管理三方库

Table of Contents

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

术语:

1 Quicklisp和ASDF的区别

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

2 使用Quicklisp

通常你的Common Lisp实现中是没有自带Quicklisp的,所以需要去官方 (http://www.quicklisp.org/beta/) 下载并手动安装。在官方网站找到http://beta.quicklisp.org/quicklisp.lisp 这个链接,这是安装文件,将它下载到磁盘的任意一个位置(比如/tmp),然后启动一个Common Lisp实现,并用它load下载回来的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)

3 安装在多个Common Lisp实现中

安装了一次Quicklisp之后,可以让它共享在系统里多种Common Lisp中。

启动其他不支持Quicklisp的Common Lisp实现,然后加载Quicklisp:

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

执行ql:add-to-init-file,将Quicklisp的配置信息写入到相应实现的启动初始化脚本中:

(ql:add-to-init-file)

然后重启REPL即可。