pip 需求文件、ruby gemfile、node package.json 等的 lisp 等价物是什么?如果这些是正确使用的东西,我不完全确定 asdf 和 quicklisp 之间的关系。
4 回答
.asd 文件是需求文件。使用 quicklisp 安装需求。
使用 ASDF 定义“系统”。创建一个my-system.asd
文件。
(asdf:defsystem #:my-system
:serial t
:description "Describe my-system here"
:author "My Name <my.name@example.com>"
:license "Specify license here"
:depends-on (#:hunchentoot
#:cl-who)
:components ((:file "package")
(:file "dispatch")))
这将创建名为#:my-system 的系统。我实际上不确定 # 表示什么,因为我在源代码中看到了没有它的系统定义。只有第一行是必需的。:depends-on
告诉 ASDF 在处理这个新的系统定义之前加载其他系统。在这种情况下,它加载#:hunchentoot
和#:cl-who
。:components
加载特定文件。package.lisp
并被dispatch.lisp
加载。:serial t
告诉它按顺序加载它。如果说取决于需要首先加载的某些内容,这很dispatch.lisp
重要。package.lisp
package.lisp
使用 quicklisp 下载并安装:depends-on
. 运行
(ql:quickload "my-system")
。
我没有看到任何版本控制的迹象。
首先,pip'srequirements.txt
与 rubygem 或 node's 非常不同package.json
:前者仅指定依赖项,而后者描述包,包括其依赖项。
Pythonpip
实际上也依赖于类似的包描述格式,称为“eggs”。
rubygem 的一个非常直接的等价物是 ASDF形式 defsystem
,通常放在一个文件中<system-name>.asd
(“系统”是 Lisp 的术语,在其他语言中可能称为包、模块或库 - 请参阅此处以获得更详细的解释)。
两个主要区别是:
ASDF 还允许指定如何构建(以及加载、测试等)系统(有点等同于 makefile)——AFAIK,在 rubygems 或节点中没有这样的概念
与 gems 或 node 不同,ASDF 不提供下载和安装包的机制。这就是
quicklisp
进来的地方——它处理获取 ASDF 系统。但这ql
不是唯一的方法:历史上还有其他安装 ASDF 库的方法,包括ASDF-Install
andclbuild
,未来可能会出现其他方法
Qlot
对于与 ASDF 和 Quicklisp 的关系,其他答案给出了一个很好的方法。
我想说的是,现在您可以使用与所指出的非常相似的通用 lisp 库,该库在quicklisp 和Qlot中可用。它用于指定项目本地依赖项。它与 ruby 中的 bundle 和 gemfile 非常相似。
Quicklisp 捆绑包
在2015-04-28中还介绍了您可以使用quicklisp 包Quicklisp 库包是自包含的系统集,可以从 Quicklisp 导出并且可以在不涉及 Quicklisp 的情况下加载。
没有与上面提到的那些一一对应的。然而,ASDF + Quicklisp 的组合非常接近。
使用 ASDF,您可以定义您的系统(如果您愿意,可以使用模块)——以一种连贯的方式打包您的 lisp 文件,并声明您的依赖项。Quicklisp 是这些系统的在线资源库。当您使用 Quicklisp 加载系统时,它会下载这些依赖项并为您加载它们。
现在我不确定是否有版本控制之类的东西..