Dependencies 如何管理公共lisp依赖项?

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加载系统时,它将下载这些依赖项并为您加载它们 现在我不确定是否有版本

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