it-swarm.com.de

Go-Installation schlägt mit Fehler fehl: Kein Installationsverzeichnis für Verzeichnis xxx außerhalb von GOPATH

~/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 von der Struktur des Projekts schlägt dies immer mit der gleichen Meldung fehl. Go Build funktioniert einwandfrei.

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 auf Mac OS X Mountain Lion und go wurde mit Homebrew installiert.

132
tgandrews

Wenn Sie für go install Keine Argumente angeben, wird standardmäßig versucht, das Paket im aktuellen Verzeichnis zu installieren. Die Fehlermeldung weist Sie darauf hin, dass dies nicht möglich ist, da das aktuelle Verzeichnis nicht Teil Ihres $GOPATH Ist.

Du kannst entweder:

  • Definieren Sie $GOPATH Zu Ihrem $ HOME (export GOPATH=$HOME).
  • Bewegen Sie Ihre Quelle innerhalb des aktuellen $GOPATH (mv ~/src/go-statsd-client /User/me/gopath).

Nachdem Sie entweder in das Verzeichnis go-statsd-client Gegangen sind und go install Eingegeben haben, funktioniert dies ebenso wie die Eingabe von go install go-statsd-client Von einer beliebigen Stelle im Dateisystem. Die erstellten Binärdateien werden in $GOPATH/bin Abgelegt.

Als unabhängiger Vorschlag möchten Sie Ihr Paket wahrscheinlich mit einem Domain-Namen versehen, um Namenskonflikte zu vermeiden (z. B. github.com/you/go-statsd-client, Wenn Sie dort Ihren Quellcode gespeichert haben).

100

Für alle OS X-Benutzer und zukünftige Benutzer müssen Sie auch GOBIN festlegen, um diese verwirrende Meldung bei der Installation und go get Zu vermeiden.

mkdir bin 
export GOBIN=$GOPATH/bin
160

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

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

Weitere Informationen: GO BUILD Source Code , Zeile 296

27

Sie müssen sowohl GOPATH als auch GOBIN einrichten. Stellen Sie sicher, dass Sie Folgendes getan haben (bitte ersetzen Sie ~/go mit Ihrem bevorzugten GOPATH und ändern Sie anschließend GOBIN). Dies wird getestet am Ubuntu 16.04 LTS.

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

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

13
Zhenhua

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

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

Dann rennst du go install von innen entweder someProgram (das eine ausführbare Datei in bin legt) oder someLibrary (das eine Bibliothek in pkg legt).

5
Earl Zedd

Für das, was es wert ist, ist hier mein .bash_profile, das auf einem Mac mit Atom gut funktioniert, nach der Installation gehen Sie mit Homebrew:

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

Ich hatte dieses Problem unter Windows.

Mein Problem war, dass mein %GOPATH% Umgebungsvariable wurde auf gesetzt

C:\Users\john\src\goworkspace

anstatt von

C:\Users\john\src\goworkspace\

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

3
eckza

In meinem Fall (OS X) lag es daran, dass ich GOPATH auf /home/username/go (Gemäß dem Buch) anstelle von /Users/username/go Gesetzt habe.

2
asdfasdfads

Ich bin unter Windows und habe es durch Eingabe des Befehls go help gopath An cmd erhalten. Lesen Sie den fett gedruckten Text in der Anweisung.

das heißt, wenn sich der zu installierende Code unter ..BaseDir...\SomeProject\src\basic\set befindet, sollte der [~ # ~] Gopath [~ # ~] nicht derselbe Speicherort sein wie der Code. Es sollte nur Basisprojekt DIR sein: ..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 gesetzt ist, verwendet GOPATH standardmäßig ein Unterverzeichnis mit dem Namen "go" im Ausgangsverzeichnis des Benutzers ($ HOME/go unter Unix,% USERPROFILE%\go unter Windows), sofern dieses Verzeichnis keine Go-Distribution enthält. Führen Sie "go env GOPATH" aus, um den aktuellen GOPATH anzuzeigen.

Siehe https://golang.org/wiki/SettingGOPATH , um einen benutzerdefinierten GOPATH festzulegen.

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 Verzeichnis pkg enthält installierte Paketobjekte. Wie in der Go-Struktur hat jedes Paar aus Zielbetriebssystem und Architektur ein eigenes Unterverzeichnis von pkg (pkg/GOOS_GOARCH).

Wenn DIR ein Verzeichnis ist, das in GOPATH aufgeführt ist, kann ein Paket mit einer Quelle in DIR/src/foo/bar als "foo/bar" importiert werden und seine kompilierte Form unter "DIR/pkg /" installiert werden. GOOS_GOARCH/foo/bar.a ".

Das bin-Verzeichnis enthält kompilierte Befehle. Jeder Befehl wird nach seinem Quellverzeichnis benannt, jedoch 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 und nicht in DIR/bin/foo/quux installiert. Das Präfix "foo /" wird entfernt, damit Sie DIR/bin zu Ihrem PATH hinzufügen können, um die installierten Befehle abzurufen. Wenn die Umgebungsvariable GOBIN festgelegt ist, werden Befehle in dem von ihr angegebenen Verzeichnis anstelle von DIR/bin installiert. 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 festgelegt wurde und dieses Problem weiterhin besteht, können Sie in Windows versuchen, [~ # ~] gobin [~ # ~] als Base Project DIR\bin oder %GOPATH%\bin.

1
yu yang Jian

Unter OSX Mojave 10.14 ist gonormalerweise unter /usr/local/go Installiert.

Richten Sie daher diese ENVs ein, und Sie sollten einsatzbereit sein.

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

Fügen Sie diese auch zu Ihrem bash_profile Oder zsh_profile Hinzu, falls dies funktioniert.

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

0
A Null Pointer

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

0
lode

Es gibt verschiedene Arten der Fehlerbehebung, die in diesem Thread und anderswo definiert wurden. Was die meisten Leute jedoch vermissen, ist, dass wir nicht nur das aktuelle Problem beheben, sondern auch versuchen, uns darum zu kümmern, ob wir im Projektdesign einen Fehler machen, der vom beabsichtigten abweicht oder von den Projekterstellern gewünscht.

Zunächst müssen Sie Ihre $ GOPATH-Variable korrigieren. Lösung: Legen Sie den Basispfad für Ihr Projekt fest. Zweitens müssen Sie einen Einstiegspunkt für Ihr Projekt definieren. Wird normalerweise mit 'main' definiert.

So versteht die Projektausführung das Basisarbeitsverzeichnis und den Arbeitspunkt Ihres Programms.

0

Vorsicht beim Laufen

export GOPATH=$HOME

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

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

Und jetzt können Sie jeden golang-Befehl verwenden, zum Beispiel:

go test github.com/<organization name>/<repository name> 
0

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

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

und dann laufen:

$ go install 
0
Margach Chris