Обзор Я пытаюсь запустить упрощенную версию этого кода , которому нужны cxml
и klacks
библиотека для парсинга XML. (Конкретный код - это глава 47 книги «Искусство Postgresql» .) Поскольку я очень мало знаю о (Common) Lisp / ASDF / Quicklisp, я не знаю, как правильно установить необходимая библиотека cxml
/ klacks
.
Система В случае, если это имеет значение, я использую SBCL 1.5.5.debian
под Ubuntu (для записей я пробовал clisp
ранее , но я обнаружил, что он поставляется с очень устаревшей версией ASDF.)
Шаги, которые я сделал до сих пор
В bash:
sudo apt-get install cl-cxml
(Действительно, /usr/share/common-lisp/source/cxml/
и /usr/share/common-lisp/source/cxml/klacks/
теперь присутствуют в моей системе.)
В sbcl REPL:
(ql:quickload :cxml)
Результат: длинное сообщение об ошибке, суть которого выглядит как Component "cxml/dom" not found
. (Хотя /usr/share/common-lisp/source/cxml/dom
существует, но я не уверен, что это важно.) См. Полное сообщение об ошибке в конце.
(ql:quickload :klacks)
Результат: еще одна длинная ошибка, суть которой равно System "klacks" not found
(хотя, опять же, каталог присутствует в системе).
Примечание
Использование qucikload
для других библиотек работает, например:
(ql:quickload :postmodern)
(ql:quickload :zip)
(ql:quickload :yason)
Вопросы
Вкратце: как правильно установить cxml
и klacks
в указанной выше системе?
Помимо решения этой конкретной проблемы, я хотел бы немного лучше понять, что происходит, в частности:
Все зависимости могут быть установлены с помощью quicklisp
или есть некоторые из них поддерживают это, а некоторые нет? (И в этом случае cxml
является зависимостью, которая не поддерживает quicklisp
? Как я могу узнать, какие пакеты его поддерживают?)
Смотрит ли quciklisp
на локальная установка (т.е. /usr/share/common-lisp/source/cxml/
) вообще, или работает только из онлайн-репозитория? (Другими словами: имеет ли значение, что я установил cl-xml
через apt-get?)
Если учитывается локальный путь, то почему он не находит cxml/dom
и cxml/klacks
?
Поскольку klacks
является подпакетом cxml
, мне нужно импортировать его отдельно или нет? Просматривая упомянутый исходный код, особенно package.lisp и pubnames.asd , я не вижу его явно импортированного. Тем не менее, он используется в коде, например здесь . Итак, я предполагаю, что необходимо явно импортировать cxml
, а затем все подпакеты (включая klacks
) также будут импортированы, автоматически с префиксом надлежащего пространства имен?
Подробные сообщения об ошибках
* (ql:quickload :cxml)
;;; Checking for wide character support... WARNING: Lisp implementation doesn't use UTF-16, but accepts surrogate code points.
yes, using code points.
To load "cxml":
Load 1 ASDF system:
cxml
; Loading "cxml"
;;; Checking for wide character support... WARNING: Lisp implementation doesn't use UTF-16, but accepts surrogate code points.
yes, using code points.
.
;;; Checking for wide character support... WARNING: Lisp implementation doesn't use UTF-16, but accepts surrogate code points.
yes, using code points.
;;; Checking for wide character support... WARNING: Lisp implementation doesn't use UTF-16, but accepts surrogate code points.
yes, using code points.
;;; Building Closure with CHARACTER RUNES
To load "cxml/dom":
Load 3 ASDF systems:
closure-common puri trivial-gray-streams
Install 1 Quicklisp release:
cxml
; Loading "cxml/dom"
;;; Checking for wide character support... WARNING: Lisp implementation doesn't use UTF-16, but accepts surrogate code points.
yes, using code points.
.
debugger invoked on a ASDF/FIND-COMPONENT:MISSING-COMPONENT in thread
#<THREAD "main thread" RUNNING {10005504C3}>:
Component "cxml/dom" not found
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [RETRY ] Retry ASDF operation.
1: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the
configuration.
2: Retry ASDF operation.
3: Retry ASDF operation after resetting the
configuration.
4: [ABORT ] Give up on "cxml/dom"
5: Give up on "cxml"
6: Exit debugger, returning to top level.
((:METHOD ASDF/OPERATE:OPERATE (SYMBOL T)) ASDF/LISP-ACTION:LOAD-OP "cxml/dom" :VERBOSE NIL) [fast-method]
error finding frame source: Bogus form-number: the source file has probably
changed too much to cope with.
source: NIL
0]
* (ql:quickload :klacks)
debugger invoked on a QUICKLISP-CLIENT:SYSTEM-NOT-FOUND in thread
#<THREAD "main thread" RUNNING {10005504C3}>:
System "klacks" not found
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Try again
1: [ABORT ] Give up on "klacks"
2: Exit debugger, returning to top level.
((LABELS QUICKLISP-CLIENT::RECURSE :IN QUICKLISP-CLIENT::COMPUTE-LOAD-STRATEGY) "klacks")
source: (CERROR "Try again" 'SYSTEM-NOT-FOUND :NAME NAME)