2012-05-10 1 views
2

J'utilise quicklisp comme outil de gestion de paquets pour SBCL.Comment utiliser package d'installation dans le répertoire système pour SBCL par QuickLisp?

Cependant, parfois, j'ai trouvé qu'il n'est pas très pratique d'installer un paquet dans le répertoire HOME de l'utilisateur actuel par ql:quickload. (Par exemple, si j'utilise pour installer xmls, les autres utilisateurs ne peuvent pas l'utiliser.)

Pire, je voudrais exécuter le code lisp en tant que script. Alors, quand j'utilise le paquet installé par quicklisp, je dois ajouter le chemin absolu de ce paquet inconfortablement, tels que:

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

Si je (require 'xmls), le compilateur ne fonctionnera pas parce qu'il ne peut pas trouver ce paquet si je utilisez les options --script.

Est-ce que quelqu'un sait comment résoudre le problème afin que je puisse utiliser --script et require (pas besoin d'ajouter un chemin absolu) en même temps?

+3

Je suggère de regarder 'save-lisp-and-die'; construisez simplement un nouveau noyau avec tous les paquets dont vous avez besoin pour le script, puis utilisez ce noyau lors du lancement de sbcl; alors il n'y a pas besoin de l'exigence en haut b/c tout est déjà chargé dans le noyau. Je le mets en commentaire, car il ne répond pas vraiment à la question dans le titre. Mais c'est une autre approche que j'ai utilisée pour écrire des scripts Lisp; oh, et essayez #!/usr/bin/env sbcl --script; c'est un peu plus portable –

Répondre

4

Je ne connais pas une bonne solution à ce problème. La solution que j'utilise est de ne pas écrire de scripts avec Common Lisp; J'écris habituellement des applications que j'utilise de manière interactive à partir de sessions CL. Quand je veux exécuter des choses à partir de la ligne de commande, j'utilise buildapp pour cela, et utilise ql:write-asdf-manifest-file pour créer un fichier à passer à --manifest-file pour buildapp.

Je souhaite parfois qu'il y avait une meilleure solution, mais il faudra probablement du travail par quelqu'un (j'espère pas moi).

0

Je viens de faire sudo sbcl et de cette façon, il sera installé pour chaque utilisateur sur mon PC - c'est OK, parce que c'est mon PC à la maison, donc il n'y a pas de danger. Une chose que je pourrais penser est peut-être symlinking le répertoire où ql installe des choses à quelque chose qui est plus facile à accéder, comme $ HOME/packages -> .../quicklisp/software ou quelque chose?

Questions connexes