Управление зависимостями в Common Lisp

Я пришел к Lisp из мира Python, который, по сути, работает на virtualenv и pip как способ создания контейнеров и управления зависимостями.

В настоящее время я более подробно изучаю Common Lisp и задаюсь вопросом, какова философия его сообщества в отношении управления зависимостями и пакетами.

Например, если я запускаю:

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

Насколько я понимаю, все эти пакеты будут установлены где-то в каталоге quicklisp. (Я не уверен, в какой форме и где они установлены).

Вопрос в том, нужно ли когда-нибудь устанавливать другую версию пакета, в зависимости от имеющегося кода. То есть что делать в таком случае? Он просто полагается на обратную совместимость пакета?

Как с этим справляется мир Common Lisp?


person MadPhysicist    schedule 13.10.2017    source источник
comment
Возможный дубликат Как мне управлять общими зависимостями lisp?   -  person Barmar    schedule 14.10.2017
comment
Возможный дубликат stackoverflow.com/questions/46609034 /   -  person Ehvince    schedule 14.10.2017
comment
Примечание. Я дал вам две ссылки в вашем другом вопросе, которые отвечают на этот вопрос. См. обсуждение вопроса Quicklist и Qlot.   -  person Ehvince    schedule 14.10.2017
comment
Quicklisp устанавливает свои пакеты в ~/quicklisp/dists/quicklisp/software/.   -  person Ehvince    schedule 14.10.2017


Ответы (1)


Если вам нужна определенная версия пакета для разработки, вам просто нужно клонировать ее в репозиторий, автоматически найденный Quicklisp (~/quicklisp/local-projects/). Эта версия будет доступна для всех проектов. Если вам нужно, чтобы это было локально для проекта или чтобы легко отправить список зависимостей с приложением, вы можете использовать Qlot, который действительно похож на файл требований pip и файл venv.

Также есть пакеты Quicklisp, как указано в этом другом ответе.

Более того, существует контроллер Quicklisp для создания дистрибутивов, целый набор пакетов, которые работают вместе, просто как и Quicklisp, но для вашего собственного связанного набора пакетов. Это то, что делает, например, cl21.

Я бы посоветовал пока не заморачиваться с ними, пока вы не поймете, что вам это нужно;)

person Ehvince    schedule 14.10.2017
comment
Спасибо друг. Я просто пытаюсь понять, как все делается в мире Лиспа. Справедливо ли сказать, что пакеты в основном обратно совместимы, поскольку Common Lisp — гораздо более стабильный язык, чем Python? - person MadPhysicist; 14.10.2017
comment
Действительно так кажется, но язык не кажется единственной причиной. Quicklisp собирает все пакеты вместе. Похоже, что сопровождающие библиотеки очень заботятся об обратной совместимости. Недавно я узнал об удалении функции SBCL после 15 лет предупреждений об устаревании. Теперь мне интересно, как обстоят дела с новой быстро развивающейся библиотекой. Похоже, что авторы выпускают новую библиотеку вместо критической новой версии (Caveman и Caveman2, Prove и Rove,…) - person Ehvince; 14.10.2017
comment
теперь мои ощущения :) (прошло несколько месяцев, я изучаю экосистему CL) Сначала это кажется странным, но работать с QL-пакетами очень просто и, следовательно, доставляет удовольствие. Нет больше ручного закрепления зависимостей и, следовательно, регулярных связанных с этим ошибок. Для работы с библиотекой в ​​режиме разработки: не pip install -e ., а простой клон в нужную директорию. Теперь Qlot выдал ошибку, когда я попробовал… - person Ehvince; 14.10.2017
comment
Я добавил слово о контроллере Quicklisp в свой ответ. - person Ehvince; 14.10.2017