Die Installation schlägt mit dem Fehler fehl: Kein Installationsort für das Verzeichnis xxx außerhalb von GOPATH

152
~/src/go-statsd-client> echo $GOPATH
/Users/me/gopath
~/src/go-statsd-client> echo $GOROOT
/usr/local/Cellar/go/1.1.1\
~/src/go-statsd-client> go install
go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH

Unabhängig davon, in welcher Struktur sich das Projekt befindet, schlägt dies immer mit derselben Nachricht fehl. Go Build funktioniert perfekt.

Hier ist mein go env

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/gopath"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.1.1"
GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
CGO_ENABLED="1"

Dies ist unter Mac OSX Mountain Lion und go wurde mit Homebrew installiert.

tgandrews
quelle

Antworten:

116

Wenn Sie keine Argumente go installdafür angeben, wird standardmäßig versucht, das Paket im aktuellen Verzeichnis zu installieren. Die Fehlermeldung sagt Ihnen, dass dies nicht möglich ist, da das aktuelle Verzeichnis nicht Teil Ihres Verzeichnisses ist $GOPATH.

Du kannst entweder:

  • Definieren Sie $GOPATHzu Ihrem $ HOME ( export GOPATH=$HOME).
  • Verschieben Sie Ihre Quelle in den aktuellen $GOPATH( mv ~/src/go-statsd-client /User/me/gopath).

Danach funktioniert das Eingeben in das go-statsd-clientVerzeichnis und das Eingeben go install, ebenso wie das Eingeben go install go-statsd-clientvon einer beliebigen Stelle im Dateisystem. Die erstellten Binärdateien werden in $GOPATH/bin.

Als nicht verwandten Vorschlag möchten Sie Ihr Paket wahrscheinlich mit einem Domainnamen benennen, um Namenskonflikte zu vermeiden (z. B. github.com/you/go-statsd-clientwenn Sie dort Ihren Quellcode aufbewahren).

Gustavo Niemeyer
quelle
5
In meinem Fall wurde dieser Fehler dadurch verursacht, dass kein $GOPATH/binVerzeichnis vorhanden war. Das Erstellen dieses Ordners war erforderlich - ich musste GOBINenv var nicht festlegen .
Xentek
4
@RobertReiz Während ich Ihre Frustration teile, sollte ich darauf hinweisen, dass die meisten anderen Sprachen diese tatsächlich verwenden, aber vielleicht sind sie nicht so sichtbar. Zum Beispiel hat Python (eine Sprache, die für ihre Einfachheit bekannt ist) PYTHONHOMEanstelle von GOROOTund PYTHONPATHanstelle von GOPATH. Auch (GC) C hat LIBRARY_PATH, C_INCLUDE_PATHusw.
Hut8
1
Ich erhalte diesen Fehler, nachdem export GOPATH=$PWD(an der Wurzel eines Golang-Klonbaums stehend) Ihre Antwort den Fehler in diesem Fall möglicherweise nicht erklären kann.
Ulidtko
2
Für mich war es nicht genug, es in $ GOPATH zu setzen. Es musste in einem Verzeichnis unter $ GOPATH / src /
Thomas
9
Ich bin mir sicher, dass es einen sehr guten Grund gibt, die Existenz von zu rechtfertigen GOPATH, aber von außen betrachtet scheint dies völlig sinnlos zu sein. Warum muss ich globale Umgebungsvariablen mutieren, um ein Paket lokal zu erstellen?
Alexander - Reinstate Monica
190

Für alle OS X-Benutzer und zukünftige Benutzer müssen Sie außerdem festlegen GOBIN, dass diese verwirrende Meldung bei Installation und Installation vermieden wirdgo get

mkdir bin 
export GOBIN=$GOPATH/bin
Benjamin Wootton
quelle
4
Sie sollten nicht einstellen müssenGOBIN . Wenn die Einstellung $GOPATH/bineinen Unterschied macht, stimmt etwas anderes mit Ihrem Setup nicht oder Sie tun etwas, das Sie nicht tun sollten.
Dave C
28
@ DaveC Ich habe auch das gleiche Problem unter OS X. Das Einstellen des GOBIN hat es behoben.
Joshi
2
Vielen Dank, es sieht so aus, als ob etwas mit dem offiziellen OS X-Paket nicht stimmt. Sie müssen GOBIN einstellen, das noch für 10.11.4 (El Capitan) gültig ist
Jonas D.
3
Dies ist auch für Ubuntu 16.04 das richtige
Update
1
Dies funktionierte perfekt auf maOS Sierra 10.12.3. Danke!
Greg Hilston
30

Sie verwenden go install in einem Verzeichnis außerhalb des GOPATH-Ordners. Legen Sie Ihre GOBIN-Umgebungsvariable fest oder verschieben Sie den src- Ordner in GOPATH.

GOPATH/
     bin/
     src/
       go-statsd-client/

Weitere Informationen: GO BUILD Quellcode , Zeile 296

Andrea Di Persio
quelle
Ich habe den obigen Vorschlag ausprobiert (GOPATH = $ HOME exportieren), bin dann in mein relevantes Verzeichnis verschoben (wo ich meinen Code schreibe) und habe go install eingegeben ... das gleiche Ergebnis go install: kein Installationsort für das Verzeichnis ....
stian
Zeile 296 ist nur eine Rückgabeanweisung?
Felix Rabe
1
Ich habe vergessen, meine GOBIN env
cevaris
Ich habe mich für diese Lösung entschieden.
Mihamina Rakotomandimby
19

Sie müssen beide GOPATHund einrichten GOBIN. Stellen Sie sicher, dass Sie Folgendes getan haben (bitte durch ~/goIhre bevorzugte ersetzen GOPATHund anschließend ändern GOBIN). Dies wird am getestet Ubuntu 16.04 LTS.

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

Die ausgewählte Antwort hat das Problem für mich nicht gelöst.

Zhenhua
quelle
Ich habe beide in 16.04 definiert und das hat bei mir nicht funktioniert.
Catskul
5

Sie möchten 3 Verzeichnisse in Ihrem ausgewählten GOPATH-Verzeichnis haben.

GOPATH
     /bin
     /src
       /someProgram
        program.go
       /someLibrary
        library.go
     /pkg

Dann führen Sie go installentweder someProgram (das eine ausführbare Datei in bin ablegt) oder someLibrary (das eine Bibliothek in pkg ablegt) aus.

Earl Zedd
quelle
1
Dies funktionierte für mich nach 2 Stunden Suche im Internet.
Vishalknishad
3

Ich hatte dieses Problem unter Windows.

Mein Problem war, dass meine %GOPATH%Umgebungsvariable auf gesetzt war

C:\Users\john\src\goworkspace

anstatt

C:\Users\john\src\goworkspace\

Das Hinzufügen des fehlenden Schrägstrichs am Ende hat es für mich behoben.

eckza
quelle
1
Heilige Kuh, du hast mich gerade vor möglicherweise mehrstündigen Kopfschmerzen gerettet. Ich bin auf Ubuntu, hatte aber das gleiche Problem. War äußerst fleißig in Bezug auf Ordnernamen, Ordnerstruktur, Voreinstellung mit src / github.com / xyabz / und alles andere als go install gab mir immer wieder Fehler.
anon58192932
3

Für das, was es wert ist, hier ist mein .bash_profile, das für mich auf einem Mac mit Atom gut funktioniert, nachdem ich mit Homebrew installiert habe:

export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
JRun
quelle
2

In meinem Fall (OS X) wurde , weil ich festgelegt GOPATHauf /home/username/go(gemäß dem Buch) statt/Users/username/go

Katamphetamin
quelle
2

Ich bin unter Windows und habe es erhalten, indem ich go help gopathcmd einen Befehl gegeben und den fetten Text in der Anweisung gelesen habe.

Das heißt, wenn sich der Code, unter dem Sie installieren möchten, befindet ..BaseDir...\SomeProject\src\basic\set, sollte der GOPATH nicht derselbe Speicherort wie der Code sein, sondern nur das Basisprojekt DIR : ..BaseDir...\SomeProject.

Die Umgebungsvariable GOPATH listet Orte auf, an denen nach Go-Code gesucht werden soll. Unter Unix ist der Wert eine durch Doppelpunkte getrennte Zeichenfolge. Unter Windows ist der Wert eine durch Semikolons getrennte Zeichenfolge. In Plan 9 ist der Wert eine Liste.

Wenn die Umgebungsvariable nicht festgelegt ist, verwendet GOPATH standardmäßig ein Unterverzeichnis mit dem Namen "go" im Home-Verzeichnis des Benutzers ($ HOME / go unter Unix,% USERPROFILE% \ go unter Windows), es sei denn, dieses Verzeichnis enthält eine Go-Distribution. Führen Sie "go env GOPATH" aus, um den aktuellen GOPATH anzuzeigen.

Unter https://golang.org/wiki/SettingGOPATH können Sie einen benutzerdefinierten GOPATH festlegen.

Jedes in GOPATH aufgeführte Verzeichnis muss eine vorgeschriebene Struktur haben:

Das src-Verzeichnis enthält den Quellcode. Der Pfad unter src bestimmt den Importpfad oder den Namen der ausführbaren Datei.

Das pkg-Verzeichnis enthält installierte Paketobjekte. Wie im Go-Baum hat jedes Zielbetriebssystem- und Architekturpaar ein eigenes Unterverzeichnis von pkg (pkg / GOOS_GOARCH).

Wenn DIR ein im GOPATH aufgeführtes Verzeichnis ist, kann ein Paket mit der Quelle in DIR / src / foo / bar als "foo / bar" importiert werden und das kompilierte Formular wird in "DIR / pkg / GOOS_GOARCH / foo / bar.a" installiert ".

Das bin-Verzeichnis enthält kompilierte Befehle. Jeder Befehl wird nach seinem Quellverzeichnis benannt, aber nur nach dem letzten Element, nicht nach dem gesamten Pfad. Das heißt, der Befehl mit der Quelle in DIR / src / foo / quux wird in DIR / bin / quux installiert, nicht in DIR / bin / foo / quux. Das Präfix "foo /" wird entfernt, damit Sie Ihrem PATH DIR / bin hinzufügen können, um zu den installierten Befehlen zu gelangen. Wenn die Umgebungsvariable GOBIN festgelegt ist, werden Befehle in dem Verzeichnis installiert, das sie anstelle von DIR / bin benennt. GOBIN muss ein absoluter Pfad sein.

Hier ist ein Beispiel für ein Verzeichnislayout:

GOPATH=/home/user/go

/home/user/go/
    src/
        foo/
            bar/               (go code in package bar)
                x.go
            quux/              (go code in package main)
                y.go
    bin/
        quux                   (installed command)
    pkg/
        linux_amd64/
            foo/
                bar.a          (installed package object)

..........

Wenn GOPATH auf Basisprojekt DIR eingestellt wurde und dieses Problem weiterhin besteht, können Sie in Windows versuchen, GOBIN als Base Project DIR\binoder festzulegen%GOPATH%\bin .

Yu Yang Jian
quelle
1

Vorsicht beim Laufen

export GOPATH=$HOME

Gehen Sie davon aus, dass Ihr Code an bestimmten Stellen im Zusammenhang mit vorhanden ist GOPATH. Stattdessen können Sie Docker verwenden, um einen beliebigen Befehl go auszuführen:

docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang

Und jetzt können Sie einen beliebigen Golang-Befehl verwenden, zum Beispiel:

go test github.com/<organization name>/<repository name> 
Omer Levi Hevroni
quelle
0

In Fenstern war mein cmd-Fenster bereits geöffnet, als ich die Umgebungsvariable GOPATH festlegte. Zuerst musste ich das cmd schließen und dann wieder öffnen, damit es wirksam wurde.

Ader
quelle
0

Das Problem ist, dass Sie sich nicht in dem Paketverzeichnis befinden, in dem sich die go-Datei mit der go-Hauptfunktion befindet, und go install den Befehl (go-Datei mit go-Hauptfunktion), den Sie installieren möchten, nicht finden kann.

$ cd /path/to/file-with-main-function.go

und dann ausführen:

$ go install 
Margach Chris
quelle
-1

Auf OSX Mojave 10.14, gowird normalerweise installiert an /usr/local/go.

Richten Sie daher diese ENVs ein, und Sie sollten bereit sein, loszulegen.

export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin

Fügen Sie diese auch zu Ihrem hinzu bash_profileoder zsh_profilewenn es funktioniert.

echo "export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin" >> ~/.bash_profile && source ~/.bash_profile

Ein Nullzeiger
quelle