2017-10-13 67 views
1

我来自Python世界的Lisp,它本质上运行于virtualenvpip,作为创建容器和管理依赖关系的方式。管理Common Lisp中的依赖

目前,我正在更详细地学习Common Lisp,并想知道它的社区理念是如何管理依赖和包。

举例来说,如果我跑:

(ql:quickload '(cl-who hunchentoot parenscript elephant fiveam css-lite cl-json))

这是我的理解是这样的软件包将在某个目录quicklisp内安装。 (我不确定在哪种形式或安装位置)。

问题是有时需要安装不同版本的软件包,具体取决于手头的代码。也就是说,在这种情况下做什么?他是否仅仅依赖于软件包的向后兼容性?

Common Lisp世界如何处理这个问题?

+1

的可能的复制(https://stackoverflow.com/questions/19718002 [我如何管理的Common Lisp的依赖?]/how-do-i-manage-common-lisp-dependencies) – Barmar

+0

可能的重复https://stackoverflow.com/questions/46609034/common-lisp-package-and-module-management – Ehvince

+1

注意:我给你两个链接在你的其他问题中回答这个问题。查看快速列表问题和Qlot的讨论。 – Ehvince

回答

5

如果您需要特定版本的开发包,您只需将其克隆到由Quicklisp(~/quicklisp/local-projects/)自动发现的存储库中即可。该版本将适用于所有项目。如果您需要将其设置为项目本地化或轻松发布应用程序依赖关系列表,则可以使用Qlot,这非常类似于点要求文件和venv。

还有Quicklisp bundles正如在这个其他答案指出。

此外,还有Quicklisp controller可以构建dists,这是一套可以一起工作的软件包,就像Quicklisp一样,但是可以用于您自己的相关软件包集合。这就是cl21所做的。

我建议不要与那些尚未打扰,直到你知道你需要它;)

+0

谢谢,伙计。我只是想了解Lisp世界中的事情。因为Common Lisp是比Python更稳定的语言,所以说软件包大多向后兼容是否公平? – MadPhysicist

+1

确实如此,但语言似乎并不是唯一的原因。 Quicklisp将所有软件包构建在一起。看起来,图书馆维护人员很关心向后兼容性。最近我了解到在经过15年的弃用警告后,SBCL功能被移除。现在我想知道新的图书馆如何迅速发展。似乎像作家发布一个新的图书馆,而不是一个突破性的新版本(穴居人和穴居人2,证明和罗夫,...) – Ehvince

+0

现在我的感觉:)(这是我探索CL生态系统的几个月)起初,它似乎很奇怪,但是使用QL软件包非常容易,因此很高兴。不再需要手动固定依赖关系,从而定期执行相关的错误。要在开发模式下使用库:不要使用'pip install -e .',而要使用正确目录中的简单克隆。现在,当我尝试它时,Qlot出错...... – Ehvince