‘How do you manage libraries when different versions of same one is used by different projects?’

It is possible to override a library in Quicklisp’s release distribution by placing the desired version in quicklisp/local-projects/ or by ensuring that it is present in ASDF’s load path.

One can implement some scheme to override the required libraries in order to set up a Lisp environment with all the correct library versions for each project. This will be time consuming and error prone.

The easy solution to this problem is to use Qlot.

The easy solution to this problem is to use Qlot. It is a dependency management tool built on Quicklisp for Quicklisp libraries. It installs and maintains a separate Quicklisp installation independent from the main installation. One can specify the source and version for each library individually. Unspecified libraries are loaded from the project’s default Quicklisp repository, which itself can be specified.

Projects which do not need dependency management simply use Quicklisp as before without even being aware of the existence of Qlot.

Library dependencies are specified in a qlfile and the project system is loaded much like plain Quicklisp.

Qlfile

# "qlfile" of "myapp"
git clack https://github.com/fukamachi/clack.git
github datafly fukamachi/datafly :branch v0.7.x
ql log4cl 2014-03-17

Loading a system

;; Installing libraries project-locally.
(qlot:install :myapp)

;; Loading a project with its project-local quicklisp.
(qlot:quickload :myapp)

By using Qlot in your projects you can guarantee that it will build with the correct libraries irrespective of the build time or place.