2017-01-27 5 views
1

installierte ich mit einem Schläger-Paket installieren:nur installieren, wenn nicht

raco pkg install <pkg-name> 

Wenn das Paket nicht installiert ist, installiert es. Wenn das Paket jedoch bereits installiert ist, wird es sich beschweren, dass das Paket bereits installiert ist. Während dies in Ordnung ist, gibt es eine bessere Möglichkeit zu überprüfen, ob ein Paket installiert ist, und nur versuchen, es zu installieren, wenn es nicht bereits installiert ist?

Für Kontext, ich möchte dies, weil ich ein (nicht-Paket) Racket-Projekt, das auf bestimmte Pakete installiert ist. Ich könnte sie in eine info.rkt-Datei einfügen, aber soweit ich das beurteilen kann, werden diese nicht installiert, wenn ich nicht versuche, das Projekt als Paket zu installieren, was für diese Domain nicht sinnvoll ist.

Also, gibt es sowieso festzustellen, ob ein Racket-Paket installiert ist? Kann ich diese Informationen außerdem nur dazu verwenden, ein Paket zu installieren, wenn es noch nicht installiert ist?

Antwort

1

Ja, tatsächlich können Sie. Wenn Sie ein Shell-Programm oder ein Makefile verwenden (im Wesentlichen mit dem Tool raco pkg über die Befehlszeile), können Sie ihm den Parameter --skip-installed übergeben. Dies wird nur versuchen, das Paket zu installieren, wenn es nicht bereits installiert ist. So können Sie so etwas wie dies in einer Keule Datei tun konnte:

all: # Replace spaces here with tabs, because make... 
    raco pkg install --skip-installed <important-pkg> 
    <rest-of-makefile> 

Alternativ, wenn Sie sich für eine ‚in Racket‘ Lösung suchen, können Sie die installed-pkg-table Funktion verwenden, um eine Hash-Tabelle zu erhalten alle installierten Pakete enthalten . Von dort aus ist es einfach, eine hash-has-key? zu tun, um zu sehen, ob das Paket in der Tabelle ist. Von dort können Sie pkg-install-command verwenden, um das Paket zu installieren. Ihr Gesamt Code wird wie folgt aussehen:

(unless (hash-has-key? (installed-pkg-table) "<important-pkg>") 
    (pkg-install-command #:deps 'search-auto i)) 

Ich sollte anmerken, dass es eine geringe Chance, dass die Paketdatenbank zwischen der Suche nach dem Schlüssel und der Installation des Pakets ändern. Wenn das für Sie wichtig ist, überprüfen Sie with-pkg-lock

Verwandte Themen