Entfernen von mit go get installierten Paketen


227

Ich lief go get package, um ein Paket herunterzuladen, bevor ich erfuhr, dass ich mein GOPATHPaket so einstellen musste, dass meine Root-Go-Installation beeinträchtigt wird (ich würde es sehr vorziehen, meine Go-Installation sauber zu halten und den Kern vom benutzerdefinierten zu trennen). Wie entferne ich zuvor installierte Pakete?


2
Für diejenigen, die Go-Module verwenden stackoverflow.com/questions/57186705/…
jesugmz

Antworten:


186

Es ist sicher, nur das Quellverzeichnis und die kompilierte Paketdatei zu löschen. Suchen Sie das Quellverzeichnis unter $GOPATH/srcund die Paketdatei unter $GOPATH/pkg/<architecture>, zum Beispiel : $GOPATH/pkg/windows_amd64.


5
Zuerst suchte ich nach $ GOPATH / pkg / Architektur /, die es nicht gab. Dann wurde mir klar, dass Sie sich auf $ GOPATH / pkg / {{Architektur}} bezogen, zum Beispiel $ GOPATH / pkg / windows_amd64.
Nucleon

1
Der Standardwert von GOPATHist /usr/lib/go.
Flimm

244
Wenn es sicher und einfach ist, warum gibt es keinen go-Unterbefehl, der dies tut?
Bengt

69
aus Richtung npm, haben wir so viel weitergo
slf

4
Auf dem Mac: $ GOPATH = $ HOME / go
Ricardo Martins

151

Sie können die Archivdateien und ausführbaren Binärdateien löschen, die go install(oder go get) für ein Paket mit erstellt werden go clean -i importpath.... Diese normalerweise befinden sich unter $GOPATH/pkgund $GOPATH/binsind.

...Stellen Sie sicher, dass Sie es in den Importpfad aufnehmen, da es den Anschein hat, dass ein Paket, das eine ausführbare Datei enthält, go clean -inur diese entfernt und keine Dateien für Unterpakete archiviert, wie gore/gocodeim folgenden Beispiel.

Der Quellcode muss dann manuell aus entfernt werden $GOPATH/src.

go cleanhat ein -nFlag für einen Trockenlauf, das druckt, was ausgeführt wird, ohne es auszuführen, sodass Sie sicher sein können (siehe go help clean). Es hat auch ein verlockendes -rFlag zum rekursiven Bereinigen von Abhängigkeiten, das Sie wahrscheinlich nicht verwenden möchten, da Sie bei einem Probelauf feststellen werden, dass viele Standard-Bibliotheksarchivdateien gelöscht werden!

Ein vollständiges Beispiel, auf das Sie ein Skript stützen können, wenn Sie möchten:

$ go get -u github.com/motemen/gore

$ which gore
/Users/ches/src/go/bin/gore

$ go clean -i -n github.com/motemen/gore...
cd /Users/ches/src/go/src/github.com/motemen/gore
rm -f gore gore.exe gore.test gore.test.exe commands commands.exe commands_test commands_test.exe complete complete.exe complete_test complete_test.exe debug debug.exe helpers_test helpers_test.exe liner liner.exe log log.exe main main.exe node node.exe node_test node_test.exe quickfix quickfix.exe session_test session_test.exe terminal_unix terminal_unix.exe terminal_windows terminal_windows.exe utils utils.exe
rm -f /Users/ches/src/go/bin/gore
cd /Users/ches/src/go/src/github.com/motemen/gore/gocode
rm -f gocode.test gocode.test.exe
rm -f /Users/ches/src/go/pkg/darwin_amd64/github.com/motemen/gore/gocode.a

$ go clean -i github.com/motemen/gore...

$ which gore

$ tree $GOPATH/pkg/darwin_amd64/github.com/motemen/gore
/Users/ches/src/go/pkg/darwin_amd64/github.com/motemen/gore

0 directories, 0 files

# If that empty directory really bugs you...
$ rmdir $GOPATH/pkg/darwin_amd64/github.com/motemen/gore

$ rm -rf $GOPATH/src/github.com/motemen/gore

Beachten Sie, dass diese Informationen auf dem goTool in Go Version 1.5.1 basieren .


2
Wie finden Sie alle Projektabhängigkeiten?
Michael Mallett

5
#!/bin/bash

goclean() {
 local pkg=$1; shift || return 1
 local ost
 local cnt
 local scr

 # Clean removes object files from package source directories (ignore error)
 go clean -i $pkg &>/dev/null

 # Set local variables
 [[ "$(uname -m)" == "x86_64" ]] \
 && ost="$(uname)";ost="${ost,,}_amd64" \
 && cnt="${pkg//[^\/]}"

 # Delete the source directory and compiled package directory(ies)
 if (("${#cnt}" == "2")); then
  rm -rf "${GOPATH%%:*}/src/${pkg%/*}"
  rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*}"
 elif (("${#cnt}" > "2")); then
  rm -rf "${GOPATH%%:*}/src/${pkg%/*/*}"
  rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*/*}"
 fi

 # Reload the current shell
 source ~/.bashrc
}

Verwendung:

# Either launch a new terminal and copy `goclean` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

goclean github.com/your-username/your-repository
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.