Ich habe ein lokal Haskell Projekt verfasst, die beide produziert:Wie verwende ich den Stack, um lokal erstellte Haskell-Module für die globale Nutzung zu installieren?
- eine ausführbare Binärdatei, und
- mehrere neue Haskell-Module, die ich möchte zugänglich gemacht zu meinen anderen, Haskell basiert, ausführbare Dateien.
Nach:
stack build
stack install
Ich finde, dass:
- die ausführbare Binärdatei (# 1, oben) läuft aus einem beliebigen Verzeichnis nur in Ordnung.
- Aber die neuen Haskell-Module (# 2, oben) werden nur gefunden, wenn ich in meinem Projektverzeichnis laufe! (Das heißt, für jede andere ausführbare Datei als # 1, oben.)
Ich muss in der Lage sein, die neuen Module von überall zu finden. Wie kann ich das erreichen?
klingt ähnlich wie [diese Frage nur ein paar Stunden früher] (https://stackoverflow.com/questions/47989939/is-there-a-deklarative-way-to-specify-packages-to-be-installed- into-global-proje), und wie dort würde ich vorschlagen, dass Sie Cabal-install anstelle von stack verwenden, dann müssen Sie sich nie darum sorgen, dass Modul-Installationen global werden. – leftaroundabout
Danke für Ihren Kommentar. Ja, "cabal install" hat mein Problem gelöst. Aber jetzt habe ich zwei separate, parallele und weitgehend redundante Haskell-Installationen, die den Speicherplatz auf der Festplatte einfrieren, und das scheint schrecklich verschwenderisch und unnötig zu sein. Es ist besonders ärgerlich, weil die binäre ausführbare Datei, die ich produziere, von jedem Verzeichnis aus gut laufen kann, was bedeutet, dass es weiß, wie ich meine neuen Haskell-Module von überall auf meinem System finde (da es sie importiert). Warum kann ich diese neuen Module nicht auch anderen ausführbaren Haskell-Dateien zur Verfügung stellen ?! – dbanas
Es ist absolut unnötig, deshalb verwende ich _only_ Cabal-install auf meinem Laptop und staple lediglich auf Travis. - Beachten Sie, dass die Art und Weise, wie Ihre ausführbare Datei importierte Module findet, sich sehr von der Art und Weise unterscheidet, wie der Compiler sie für eine Quelldatei findet. In der Tat, wenn Sie statisch verknüpfen, dann gibt es _isnot_ etwas, das external gefunden werden muss, da alles bereits in der Binärdatei enthalten ist. Wenn Sie dynamisch verknüpfen, wird ein fest codierter Pfad zu einer bestimmten Hash-Datei mit dynamischer Bibliothek angezeigt. Dies funktioniert jedoch nur, weil der Versions-Resolver und der Linker ihre Arbeit vor dem Handlesen erledigt haben. – leftaroundabout