Dependencies 如何管理公共lisp依赖项?
lisp与pip需求文件、ruby gemfile、node package.json等的等价物是什么?我不完全确定asdf和quicklisp之间的关系,如果它们是正确的使用方法 没有一对一等同于上述内容。然而,ASDF+Quicklisp的组合非常接近 使用ASDF,您可以定义您的系统(如果愿意,可以定义模块)——以一致的方式打包lisp文件,并声明依赖项。Quicklisp是这些系统的在线资源库。当您使用Quicklisp加载系统时,它将下载这些依赖项并为您加载它们Dependencies 如何管理公共lisp依赖项?,dependencies,lisp,common-lisp,quicklisp,asdf,Dependencies,Lisp,Common Lisp,Quicklisp,Asdf,lisp与pip需求文件、ruby gemfile、node package.json等的等价物是什么?我不完全确定asdf和quicklisp之间的关系,如果它们是正确的使用方法 没有一对一等同于上述内容。然而,ASDF+Quicklisp的组合非常接近 使用ASDF,您可以定义您的系统(如果愿意,可以定义模块)——以一致的方式打包lisp文件,并声明依赖项。Quicklisp是这些系统的在线资源库。当您使用Quicklisp加载系统时,它将下载这些依赖项并为您加载它们 现在我不确定是否有版本
现在我不确定是否有版本控制之类的东西。A.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")))
(asdf:defsystem#:我的系统
:序列号t
:description“在此处描述我的系统”
:作者“我的名字”
:license“在此处指定许可证”
:取决于
#:cl(世卫组织)
:组件(:文件“包”)
(:文件“分派”))
这将创建名为#:我的系统的系统。实际上,我不确定#表示什么,因为我在源代码中见过没有它的系统定义。只需要第一行<代码>:取决于在处理此新系统定义之前告诉ASDF加载其他系统。在本例中,它加载:hunchentoot
和:cl who
<代码>:组件加载特定文件<代码>package.lisp和dispatch.lisp
已加载<代码>:串行t告诉它按顺序加载。如果说dispatch.lisp
依赖于package.lisp
中的某些内容,因此需要首先加载package.lisp
,这一点很重要
使用quicklisp下载并安装:dependens on
中的依赖项。跑
(ql:quickload“我的系统”)
我没有看到任何版本控制的迹象。首先,pip的
requirements.txt
与rubygem或node的package.json非常不同:前者只指定依赖项,而后者描述包,包括其依赖项
Python的pip
实际上也依赖于类似的包描述格式,称为“eggs”
rubygem的一个相当直接的等价物是defsystem
表单,通常放在文件.asd
中(“system”是Lisp的术语,用于表示其他语言中可能称为包、模块或库的内容,请参阅以获取更详细的解释)
两个主要区别是:
- ASDF还允许指定如何构建(以及加载、测试等)系统(在某种程度上相当于一个makefile)——好吧,rubygems或node中没有这样的概念
- 与gems或node不同,ASDF不提供下载和安装包的机制。这就是
quicklisp
的用武之地——它处理获取ASDF系统。但是ql
并不是这里唯一的方法:历史上有其他安装ASDF库的方法,包括ASDF Install
和clbuild
,将来可能会出现其他方法
Qlot
对于与ASDF和Quicklisp的关系,其他答案给出了一个很好的方法
我想说的是,现在您可以使用一个公共的lisp库,它与前面提到的库非常相似,可以在quicklisp和is上找到。它用于指定项目本地依赖项。它与ruby中的bundle和gemfile非常相似
Quicklisp包
在中还介绍了可以使用Quicklisp库捆绑包,这些捆绑包是从Quicklisp导出的自包含系统集,可以在不涉及Quicklisp的情况下加载。重新版本控制:您可以在defsystem
中定义版本。Quicklisp不是一个存储库,它从许多不同的来源下载东西,主要是Clicky,但还有更多。ASD的用途与setup.py(创建Python包的传统方式)几乎相同。@wvxvw版本控制的意思是在依赖项中声明它(如gemfile或package.json)。。你能做到吗?然后Quicklisp会下载正确的版本吗?编辑:没错,Quicklisp可以从许多来源下载,而不是一个存储库——更新后的答案:
表示不需要的符号(这不是必须的)。至于版本控制,在defsystem