Как использовать пакет установки в системный каталог для SBCL с помощью QuickLisp?

Я использую quicklisp в качестве инструмента управления пакетами для SBCL.

Однако иногда мне казалось не очень удобным устанавливать пакет в домашнюю директорию текущего пользователя с помощью ql:quickload. (Например, если я использую (ql:quickload "xmls") для установки xmls, другие пользователи не смогут его использовать.)

Что еще хуже, я хотел бы запустить код lisp как скрипт. Поэтому, когда я использую пакет, установленный quicklisp, мне нужно неудобно добавить абсолютный путь к этому пакету, например:

#!/usr/bin/sbcl --script
(require 'xmls "..../quicklisp/dists/quicklisp/software/xmls-1.4/xmls")

Если я использую (require 'xmls), компилятор не будет работать, потому что он не сможет найти этот пакет, если я использую параметры --script.

Кто-нибудь знает, как решить проблему, чтобы я мог одновременно использовать --script и require (не нужно добавлять абсолютный путь)?


person Hanfei Sun    schedule 10.05.2012    source источник
comment
Я бы посоветовал посмотреть на «сохрани-шепеляв-и-умри»; просто создайте новое ядро ​​со всеми пакетами, необходимыми для сценариев, а затем используйте это ядро ​​при запуске sbcl; тогда нет необходимости в требованиях вверху, т.к. все это уже загружено в ядро. Я помещаю это как комментарий, потому что это на самом деле не отвечает на вопрос в заголовке. Но это другой подход, который я использовал при написании сценариев на Лиспе; о, и попробуйте #!/usr/bin/env sbcl --script; это немного более портативно   -  person Clayton Stanley    schedule 11.05.2012


Ответы (2)


Я не знаю хорошего решения этой проблемы. Решение, которое я использую, состоит в том, чтобы не писать скрипты на Common Lisp; Я обычно пишу приложения, которые я использую в интерактивном режиме из сеансов CL. Когда мне нужно запустить что-то из командной строки, я использую для этого buildapp и использую ql:write-asdf-manifest-file создать файл для передачи в --manifest-file для buildapp.

Иногда мне хочется, чтобы было лучшее решение, но это, вероятно, потребует от кого-то некоторой работы (надеюсь, не от меня).

person Xach    schedule 10.05.2012

Я просто делаю sudo sbcl и таким образом он будет установлен для каждого пользователя на моем компьютере - это нормально, потому что это мой домашний компьютер, так что опасности нет.

Одна вещь, о которой я мог бы подумать, это, возможно, символическая ссылка на каталог, в котором ql устанавливает вещи, на что-то, к чему легче получить доступ, например, $HOME/packages -> .../quicklisp/software или что-то в этом роде?

person Community    schedule 10.05.2012