2013-05-27 23 views
6

Ich habe vor kurzem OPAM nach Anweisungen installiert, um es zu versuchen und es sieht gut aus und ich möchte es verwenden. Es kann jedoch zuvor installierte OCAML-Pakete, die ich manuell installiert habe, nicht erkennen, bevor ich OPAM ausprobieren möchte.Erkennt Ocaml OPAM bereits installierte Ocaml-Pakete?

Das erste, was OPAM jetzt für eine Paketinstallation tun möchte, ist die Installation von ocamlfind. Das Abfragen von Informationen zu Paketen, die ich manuell installiert habe, spiegelt nicht wider, dass sie bereits installiert sind. Dies schließt ocamlfind ein.

Ich habe Angst, etwas zu tun, da ich keine Ahnung habe, welchen Effekt es haben könnte, ein anderes Paket zu installieren. OPAM wird ocamlfind mindestens überschreiben oder neu installieren. Wäre das mein vorhandener Okamelfind und sein Wissen über alle Pakete, die ich bereits manuell installiert habe, und meine Fähigkeit, sie zu benutzen, zu überlisten? Ich möchte nicht alles neu installieren müssen. Ich habe gesucht und gesucht, aber keine Dokumentation oder Forenbeiträge zu diesem Thema gefunden und ich weiß nicht genau, wie ocamlfind unter der Haube funktioniert.

Zumindest wäre es schön, wenn OPAM entweder erkennen könnte, oder welche Pakete bereits existieren und wo sie sich befinden, um eine unnötige Neukompilierung zu vermeiden. Vielleicht macht es das schon, aber ich konnte nicht herausfinden, ob es das tut.

Antwort

6

OPAM bietet einen (oder mehr) OCaml Installationen unabhängig von dem Standard ein, das heißt der Compiler oder Bibliotheken normalerweise in /usr/bin, /usr/lib/ocaml oder /usr/local/blahblah gefunden. Daher kann Ihr OCaml-System von Hand installiert und auf OPAM-Basis koexistieren. Die gesamte OPAM-Installation erfolgt unter $HOME/.opam/switch/ (standardmäßig switch = System), einschließlich der binären ausführbaren Datei. In Ihrem Fall wurde OCamlFind nicht von OPAM überschrieben. OPAM hat eine andere OCamlFind in einem anderen Verzeichnis installiert.

Welches System verwendet wird, kann durch Umgebungsvariablen "geschaltet" werden. "opam config env" zeigt die Variablen an, die Sie deklarieren müssen, um den aktuellen "Schalter" zu verwenden. Wenn Sie die Standardinstallation verwenden möchten, stellen Sie sicher, dass diese Variablen nicht auf OPAM-Objekte verweisen.

Um mit Ihren handkompilierten Bibliotheken und OPAM-Paketen zu leben, kompilieren Sie sie neu und installieren Sie sie unter der Switch-Umgebung von OPAM erneut. Beachten Sie, dass OPAM Ihre Pakete hier möglicherweise überschreibt. Wenn Sie beispielsweise ocamlfind manuell in "system" OPAM dir installieren und dann "opam install ocamlfind" eingeben, überschreibt OPAM Ihre OCamlFind-Installation. (Oh, BTW, ich denke, es ist schwierig für OPAM, uns zu warnen, wenn es die bestehende Installation hier überschreibt, da ein OPAM-Paket keine Informationen darüber hat, welche OCamlFind-Pakete es installiert).

Verwenden Sie die Bibliotheken in den Standard-Ort und OPAM-Pakete zur gleichen Zeit installiert ist ... AFAIK, nicht einfach. Zumindest OPAM ist für diesen Zweck nicht gedacht, denke ich. Um Verwechslungen von Bibliothekspfaden zu vermeiden, portieren Sie diese auf einen der OPAM-Switches.

Wenn Sie in Zukunft einige Funktionswünsche von OPAM erhalten, geben Sie diese unter https://github.com/OCamlPro/opam ein.