L'installazione non riesce con errore: nessun percorso di installazione per la directory xxx al di fuori di 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

Non importa quale sia la struttura del progetto in questo fallisce sempre con lo stesso messaggio. Go build funziona perfettamente.

Ecco il mio 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"

Questo è su Mac OSX Mountain Lion e go è stato installato con homebrew.

Risposte:


116

Quando non fornisci argomenti a go install , per impostazione predefinita si tenta di installare il pacchetto nella directory corrente. Il messaggio di errore ti dice che non può farlo, perché la directory corrente non fa parte della tua $GOPATH.

Puoi:

  • Definire $GOPATH in $ HOME ( export GOPATH=$HOME).
  • Sposta la tua sorgente all'interno dell'attuale $GOPATH(mv ~/src/go-statsd-client /User/me/gopath ).

Dopo l'uno o l'altro, andare nella go-statsd-clientdirectory e digitare go installfunzionerà, così come digiteràgo install go-statsd-client da qualsiasi parte del filesystem. I binari creati entreranno in $GOPATH/bin.

Come suggerimento non correlato, probabilmente si desidera spaziare il nome del pacchetto con un nome di dominio, per evitare lo scontro tra nomi (ad esempio github.com/you/go-statsd-client, se è lì che si tiene il codice sorgente).


5
Nel mio caso questo errore è stato causato dalla mancanza di una $GOPATH/bindirectory. Era necessario creare questa cartella, non avevo bisogno di impostare GOBINenv var.
xentek,

4
@RobertReiz, mentre condivido la tua frustrazione, dovrei sottolineare che la maggior parte delle altre lingue li utilizza, ma forse non sono così visibili. Ad esempio, Python (un linguaggio famoso per la sua semplicità) ha PYTHONHOMEinvece GOROOTe PYTHONPATHinvece di GOPATH. Anche (GC) C ha LIBRARY_PATH, C_INCLUDE_PATHe così via
Hut8

1
Ricevo questo errore dopo export GOPATH=$PWD(in piedi alla radice di un albero di cloni del Golang), la tua risposta non può probabilmente spiegare l'errore in questo caso.
Ulidtko,

2
Per me, metterlo in $ GOPATH non è stato sufficiente. Doveva trovarsi in una directory sotto $ GOPATH / src /
Thomas,

9
Sono sicuro che ci sono delle ottime ragioni per giustificare l'esistenza di GOPATH, ma dall'esterno guardando dentro, questo sembra completamente senza cervello. Perché devo mutare le variabili di ambiente globali solo per creare un pacchetto localmente 🤔
Alexander -

193

Per tutti gli utenti di OS X e futuri, è inoltre necessario impostare GOBINper evitare questo messaggio confuso su installazione ego get

mkdir bin 
export GOBIN=$GOPATH/bin

4
Non dovresti aver bisogno di impostareGOBIN . Se impostarlo per $GOPATH/binfare la differenza, allora qualcos'altro non va nella tua configurazione o stai facendo qualcosa che non dovresti.
Dave C,

29
@DaveC Anch'io ho lo stesso problema su OS X. L'impostazione di GOBIN l'ha risolto.
nJoshi il

2
Grazie mille, sembra che qualcosa con il pacchetto OS X ufficiale sia sbagliato, in effetti è necessario impostare GOBIN, ancora valido per il 10.11.4 (El Capitan)
Jonas D.

3
Questa è una correzione corretta anche per Ubuntu 16.04, con pacchetto binario da http://golang.org/dl/
suside

1
Questo ha funzionato perfettamente su maOS Sierra 10.12.3 Grazie!
Greg Hilston,

30

Stai usando go install su una directory fuori dalla cartella GOPATH. Imposta la tua variabile env GOBIN o sposta la cartella src in GOPATH.

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

Ulteriori informazioni: GO BUILD Codice sorgente , linea 296


Ho provato il suggerimento sopra (esporta GOPATH = $ HOME), quindi mi sono spostato nella mia directory pertinente (dove sto scrivendo il mio codice) e ho digitato go install ... stesso risultato go install: nessuna posizione di installazione per la directory ....
stian

La riga 296 è solo una dichiarazione di ritorno?
Felix Rabe,

1
Ho dimenticato di impostare il mio ambiente GOBIN
cevaris il

Sono andato per questa soluzione.
Mihamina Rakotomandimby,

19

È necessario impostare sia GOPATHe GOBIN. Assicurati di aver fatto quanto segue (sostituisci ~/gocon il tuo preferito GOPATHe successivamente cambia GOBIN). Questo è testato su Ubuntu 16.04 LTS.

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

La risposta selezionata non ha risolto il problema per me.


Ho definito entrambi in 16.04 e questo non ha funzionato per me.
Catskul

5

Ti consigliamo di avere 3 directory all'interno della directory GOPATH scelta.

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

Quindi go installeseguirai dall'interno someProgram (che mette un eseguibile nel cestino) o someLibrary (che mette una libreria in pkg).


1
Questo ha funzionato per me dopo aver cercato per 2 ore su Internet.
vishalknishad

3

Ho avuto questo problema su Windows.

Il mio problema era che la mia %GOPATH%variabile d'ambiente era impostata su

C:\Users\john\src\goworkspace

invece di

C:\Users\john\src\goworkspace\

L'aggiunta della barra finale mancante alla fine l'ha risolta per me.


1
santa mucca mi hai appena salvato da un mal di testa potenzialmente di più ore. Sono su Ubuntu ma ho avuto lo stesso problema. Era estremamente diligente riguardo ai nomi delle cartelle, alla struttura delle cartelle, alla prefazione con src / github.com / xyabz / e tutto tranne l'installazione continuava a darmi errori.
anon58192932

3

Per quello che vale, ecco il mio .bash_profile, che funziona bene per me su un Mac con Atom, dopo l'installazione vai con Homebrew:

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

2

Nel mio caso (OS X) è stato perché ho impostato GOPATHa /home/username/go(come per il libro) al posto di/Users/username/go


2

Sono su Windows e l'ho ottenuto dando il comando go help gopath a cmd letto il testo in grassetto nell'istruzione,

cioè se il codice si wnat da installare è ..BaseDir...\SomeProject\src\basic\setil GOPATH non dovrebbe essere nella stessa posizione come codice, dovrebbe essere solo di base del progetto DIR: ..BaseDir...\SomeProject.

La variabile d'ambiente GOPATH elenca i luoghi in cui cercare il codice Go. Su Unix, il valore è una stringa separata da due punti. Su Windows, il valore è una stringa separata da punto e virgola. Nel piano 9, il valore è un elenco.

Se la variabile di ambiente non è impostata, GOPATH imposta automaticamente una sottodirectory denominata "go" nella home directory dell'utente ($ HOME / go su Unix,% USERPROFILE% \ go su Windows), a meno che quella directory non contenga una distribuzione Go. Esegui "go env GOPATH" per vedere l'attuale GOPATH.

Vedi https://golang.org/wiki/SettingGOPATH per impostare un GOPATH personalizzato.

Ogni directory elencata in GOPATH deve avere una struttura prescritta:

La directory src contiene il codice sorgente. Il percorso sotto src determina il percorso di importazione o il nome dell'eseguibile.

La directory pkg contiene oggetti pacchetto installati. Come nella struttura Go, ogni sistema operativo di destinazione e coppia di architetture ha la propria sottodirectory di pkg (pkg / GOOS_GOARCH).

Se DIR è una directory elencata nella GOPATH, un pacchetto con sorgente in DIR / src / foo / bar può essere importato come "foo / bar" e ha il suo modulo compilato installato in "DIR / pkg / GOOS_GOARCH / foo / bar.a ".

La directory bin contiene comandi compilati. Ogni comando è chiamato per la sua directory di origine, ma solo l'elemento finale, non l'intero percorso. Cioè, il comando con sorgente in DIR / src / foo / quux è installato in DIR / bin / quux, non DIR / bin / foo / quux. Il prefisso "pippo /" viene rimosso in modo da poter aggiungere DIR / bin al PERCORSO per ottenere i comandi installati. Se la variabile di ambiente GOBIN è impostata, i comandi vengono installati nella directory che nomina invece di DIR / bin. GOBIN deve essere un percorso assoluto.

Ecco un esempio di layout di directory:

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)

..........

se GOPATH è stato impostato su Base Project DIR e presenta ancora questo problema, in Windows puoi provare a impostare GOBIN come Base Project DIR\bino %GOPATH%\bin.


1

Attento durante la corsa

export GOPATH=$HOME

Vai supponiamo che il tuo codice esista in luoghi specifici correlati GOPATH. Quindi, invece, puoi utilizzare la finestra mobile per eseguire qualsiasi comando go:

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

E ora puoi usare qualsiasi comando golang, ad esempio:

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

0

In windows, la mia finestra cmd era già aperta quando ho impostato la variabile d'ambiente GOPATH. Per prima cosa ho dovuto chiudere il cmd e quindi riaprirlo perché diventasse efficace.


0

Il problema è che non ci si trova nella directory del pacchetto che ha il file go con la funzione go main e go install non trova il comando (go file con go main function) che si desidera installare.

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

e poi esegui:

$ go install 

-1

Su OSX Mojave 10.14, in generego è installato all'indirizzo/usr/local/go .

Quindi, imposta questi ENV e dovresti essere pronto per partire.

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

Inoltre, aggiungili al tuo bash_profileo zsh_profilese funziona.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.