2017-10-13 3 views
1

Ich komme zu Lisp aus der Python-Welt, die im Wesentlichen auf virtualenv und pip als die Möglichkeit zum Erstellen von Containern und Verwalten von Abhängigkeiten läuft.Abhängigkeiten in Common Lisp verwalten

Derzeit lerne ich Common Lisp genauer und frage mich, was die Community-Philosophie zum Verwalten von Abhängigkeiten und Paketen ist.

Zum Beispiel, wenn ich laufe:

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

es mein Verständnis ist, dass alle diese Pakete werden irgendwo im quicklisp Verzeichnis installiert werden. (Ich bin nicht sicher, in welcher Form oder wo sie installiert sind).

Die Frage ist, ob es irgendwann notwendig ist, je nach Code eine andere Version eines Pakets zu installieren. Das heißt, was macht man in diesem Fall? Ist er einfach auf die Rückwärtskompatibilität des Pakets angewiesen?

Wie geht die Common Lisp Welt damit um?

+1

Mögliche Duplikat (https://stackoverflow.com/questions/19718002 [Wie kann ich Common Lisp Abhängigkeiten verwalten?]/how-do-i-manage-common-lisp-Abhängigkeiten) – Barmar

+0

Mögliches Duplikat von https://stackoverflow.com/questions/46609034/common-lisp-package-and-module-management – Ehvince

+1

Hinweis: Ich habe Ihnen zwei Links gegeben in deiner anderen Frage, die das beantwortet. Weitere Informationen finden Sie in der Quicklist-Ausgabe und in Qlot. – Ehvince

Antwort

5

Wenn Sie eine bestimmte Version eines Pakets für die Entwicklung benötigen, müssen Sie es nur in ein Repository kopieren, das von Quicklisp (~/quicklisp/local-projects/) automatisch gefunden wird. Diese Version wird für alle Projekte verfügbar sein. Wenn Sie möchten, dass dies projektlokal ist, oder um eine Liste von Abhängigkeiten mit einer Anwendung zu versenden, können Sie Qlot verwenden, was wirklich wie eine Pip-Anforderungsdatei und ein venv ist.

Es gibt auch Quicklisp bundles wie in dieser anderen Antwort gezeigt.

Noch mehr, es gibt Quicklisp controller zu erstellen Dists, eine ganze Reihe von Paketen, die zusammenarbeiten, genau wie Quicklisp, aber für Ihre eigenen verwandten Satz von Paketen. Das macht zum Beispiel cl21.

Ich würde raten, nicht mit den noch zu stören, bis Sie wissen, dass Sie es brauchen;)

+0

Danke, Kumpel. Ich versuche nur eine Vorstellung davon zu bekommen, wie die Dinge in der Lisp-Welt funktionieren. Ist es fair zu sagen, dass Pakete größtenteils abwärtskompatibel sind, da Common Lisp eine viel stabilere Sprache als Python ist? – MadPhysicist

+1

Tatsächlich scheint es so, aber die Sprache scheint nicht der einzige Grund zu sein. Quicklisp erstellt alle Pakete zusammen. Es scheint, dass die Bibliotheksbetreuer sich sehr um die Rückwärtskompatibilität kümmern. In letzter Zeit habe ich erfahren, dass eine SBCL-Funktion nach 15 Jahren Abmeldungswarnungen entfernt wurde. Jetzt frage ich mich, wie sich die Dinge mit einer neuen Bibliothek schnell entwickeln können. Es scheint, als ob Autoren eine neue Bibliothek anstelle einer neuen Version veröffentlichen (Caveman und Caveman2, Prove und Rove, ...) – Ehvince

+0

jetzt mein Gefühl :) (es ist ein paar Monate her, dass ich das CL-Ökosystem erkunde) Zuerst erscheint es seltsam, aber es ist sehr einfach und daher eine Freude, mit QL-Paketen zu arbeiten. Kein manuelles Pinnen von Abhängigkeiten mehr und damit regelmäßig auftretende Fehler. Um mit einer Bibliothek im Entwicklungsmodus zu arbeiten: no 'pip install -e .' aber ein einfacher Klon im richtigen Verzeichnis. Jetzt, Qlot fehlerhaft, als ich es versuchte ... – Ehvince