Instalacja Go kończy się niepowodzeniem z powodu błędu: brak lokalizacji instalacji dla katalogu xxx poza 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

Bez względu na to, w jakiej strukturze jest projekt, zawsze kończy się to tym samym przesłaniem. Idź kompilacja działa idealnie.

Tutaj jest mój 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"

To jest na Mac OSX Mountain Lion i go został zainstalowany z homebrew.

tgandrews
źródło

Odpowiedzi:

116

Jeśli nie podasz żadnych argumentów go install, domyślnie zostanie podjęta próba zainstalowania pakietu w bieżącym katalogu. Komunikat o błędzie informuje, że nie może tego zrobić, ponieważ bieżący katalog nie jest częścią twojego $GOPATH.

Możesz albo:

  • Zdefiniuj $GOPATHw $ HOME ( export GOPATH=$HOME).
  • Przenieś źródło do bieżącego $GOPATH( mv ~/src/go-statsd-client /User/me/gopath).

Po czymkolwiek, przechodzenie do go-statsd-clientkatalogu i wpisywanie go installbędzie działać, podobnie jak pisanie go install go-statsd-clientz dowolnego miejsca w systemie plików. Zbudowane pliki binarne trafią do $GOPATH/bin.

Jako niepowiązana sugestia, prawdopodobnie będziesz chciał nazwać swój pakiet nazwą domeny, aby uniknąć kolizji nazw (np. github.com/you/go-statsd-clientJeśli tam trzymasz swój kod źródłowy).

Gustavo Niemeyer
źródło
5
W moim przypadku ten błąd był spowodowany brakiem $GOPATH/binkatalogu. Utworzenie tego folderu było potrzebne - nie musiałem ustawiać GOBINenv var.
xentek
4
@RobertReiz Dzielę się twoją frustracją, ale powinienem zwrócić uwagę, że większość innych języków faktycznie ich używa, ale może nie są tak widoczne. Na przykład Python (język znany ze swojej prostoty) ma PYTHONHOMEzamiast GOROOTi PYTHONPATHzamiast GOPATH. Nawet (GC) C ma LIBRARY_PATH, C_INCLUDE_PATHitp
Hut8
1
Otrzymuję ten błąd po export GOPATH=$PWD(stojąc u podstawy drzewa klonów Golang), twoja odpowiedź nie może prawdopodobnie wyjaśnić błędu w tym przypadku.
ulidtko
2
Dla mnie umieszczenie go w $ GOPATH nie wystarczyło. Musiał znajdować się w katalogu pod $ GOPATH / src /
Thomas,
9
Jestem pewien, że istnieje bardzo dobry powód, aby uzasadnić istnienie GOPATH, ale patrząc z zewnątrz, wydaje się to całkowicie bezmyślne. Dlaczego muszę mutować globalne zmienne środowiskowe tylko po to, aby zbudować pakiet lokalnie 🤔
Alexander - Przywróć Monikę
192

Dla każdego użytkownika OS X i przyszłego mnie, musisz również ustawić, GOBINaby uniknąć tego mylącego komunikatu podczas instalacji igo get

mkdir bin 
export GOBIN=$GOPATH/bin
Benjamin Wootton
źródło
4
Nie musisz ustawiaćGOBIN . Jeśli ustawienie tego $GOPATH/binrobi różnicę, oznacza to, że coś innego jest nie tak z twoją konfiguracją lub robisz coś, czego nie powinieneś.
Dave C
29
@DaveC Ja też mam ten sam problem na OS X. Ustawienie GOBINA naprawiło to.
nJoshi
2
Dziękuję bardzo, wygląda na to, że coś z oficjalnym pakietem OS X jest nie tak i wymaga ustawienia GOBIN, nadal ważne na 10.11.4 (El Capitan)
Jonas D.
3
Jest to również poprawna poprawka dla Ubuntu 16.04, z pakietem binarnym z http://golang.org/dl/
suside
1
To działało idealnie na maOS Sierra 10.12.3 Dzięki!
Greg Hilston,
30

Używasz go install w katalogu poza folderem GOPATH. Ustaw zmienną env GOBIN lub przenieś folder src do GOPATH.

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

Więcej informacji: GO BUILD Kod źródłowy , wiersz 296

Andrea Di Persio
źródło
Wypróbowałem powyższą sugestię (eksportuj GOPATH = $ HOME), a następnie przeniosłem się do mojego odpowiedniego katalogu (gdzie piszę kod) i wpisałem go install ... ten sam wynik go install: brak lokalizacji instalacji dla katalogu ....
stian
Linia 296 to po prostu instrukcja powrotu?
Felix Rabe
1
Zapomniałem ustawić mój GOBIN env
cevaris
Poszedłem na to rozwiązanie.
Mihamina Rakotomandimby
19

Musisz skonfigurować zarówno GOPATHi GOBIN. Upewnij się, że wykonałeś następujące czynności (wymień ~/gona preferowany, GOPATHa następnie zmień GOBIN). To jest testowane Ubuntu 16.04 LTS.

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

Wybrana odpowiedź nie rozwiązała za mnie problemu.

Zhenhua
źródło
Obie zdefiniowałem w 16.04 i to mi nie wyszło.
Catskul
5

Będziesz chciał mieć 3 katalogi w wybranym katalogu GOPATH.

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

Następnie uruchomisz go installz wnętrza someProgram (który umieszcza plik wykonywalny w bin) lub someLibrary (który umieszcza bibliotekę w pkg).

Earl Zedd
źródło
1
To zadziałało dla mnie po 2 godzinach wyszukiwania w Internecie.
vishalknishad
3

Miałem ten problem w systemie Windows.

Mój problem polegał na tym, że moja %GOPATH%zmienna środowiskowa została ustawiona na

C:\Users\john\src\goworkspace

zamiast

C:\Users\john\src\goworkspace\

Dodanie brakującego ukośnika na końcu rozwiązało problem.

eckza
źródło
1
Święta krowa, właśnie uratowałaś mnie od potencjalnie wielogodzinnego bólu głowy. Jestem na Ubuntu, ale miałem ten sam problem. Byłem niezwykle sumienny, jeśli chodzi o nazwy folderów, strukturę folderów, poprzedzanie src / github.com / xyabz / i wszystko, ale go zainstalować, ciągle dawało mi błędy.
anon58192932,
3

Oto mój .bash_profile, który działa dobrze na komputerze Mac z Atomem, po zainstalowaniu go z Homebrew:

export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
JRun
źródło
2

W moim przypadku (OS X), to dlatego, że mam ustawiony GOPATHna /home/username/go(jak na książki) zamiast/Users/username/go

katamfetamina
źródło
2

Jestem na Windowsie i otrzymałem to, wydając polecenie go help gopathcmd i przeczytałem pogrubiony tekst w instrukcji,

czyli jeśli kod Państwo przeciwnym razie możesz zainstalować to w ..BaseDir...\SomeProject\src\basic\setThe GOPATH nie powinno być takie samo położenie jak kod, powinien być tylko podstawowa Projekt DIR: ..BaseDir...\SomeProject.

Zmienna środowiskowa GOPATH zawiera listę miejsc, w których należy szukać kodu Go. W systemie Unix wartość jest łańcuchem rozdzielanym dwukropkami. W systemie Windows wartość jest ciągiem rozdzielanym średnikami. W planie 9 wartością jest lista.

Jeśli zmienna środowiskowa nie jest ustawiona, GOPATH przyjmuje domyślnie podkatalog o nazwie „go” w katalogu domowym użytkownika ($ HOME / go w systemie Unix,% USERPROFILE% \ go w systemie Windows), chyba że katalog ten zawiera dystrybucję Go. Uruchom „go env GOPATH”, aby zobaczyć aktualny GOPATH.

Zobacz https://golang.org/wiki/SettingGOPATH aby ustawić niestandardową GOPATH.

Każdy katalog wymieniony w GOPATH musi mieć określoną strukturę:

Katalog src zawiera kod źródłowy. Ścieżka poniżej src określa ścieżkę importu lub nazwę pliku wykonywalnego.

Katalog pkg zawiera zainstalowane obiekty pakietów. Podobnie jak w przypadku drzewa Go, każdy docelowy system operacyjny i para architektury ma swój własny podkatalog pkg (pkg / GOOS_GOARCH).

Jeśli DIR jest katalogiem wymienionym w GOPATH, pakiet ze źródłami w DIR / src / foo / bar można zaimportować jako „foo / bar” i ma zainstalowaną skompilowaną formę jako „DIR / pkg / GOOS_GOARCH / foo / bar.a ”.

Katalog bin zawiera skompilowane polecenia. Każde polecenie ma nazwę odpowiadającą jego katalogowi źródłowemu, ale tylko elementowi końcowemu, a nie całej ścieżce. Oznacza to, że polecenie ze źródłem w katalogu DIR / src / foo / quux jest instalowane w katalogu DIR / bin / quux, a nie w DIR / bin / foo / quux. Prefiks „foo /” jest usuwany, dzięki czemu można dodać DIR / bin do swojej ŚCIEŻKI, aby uzyskać dostęp do zainstalowanych poleceń. Jeśli ustawiona jest zmienna środowiskowa GOBIN, komendy są instalowane w katalogu, którego nazwa wskazuje, zamiast w katalogu DIR / bin. GOBIN musi być ścieżką absolutną.

Oto przykładowy układ katalogu:

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)

..........

jeśli GOPATH został ustawiony na Base Project DIR i nadal występuje ten problem, w systemie Windows możesz spróbować ustawić GOBIN jako Base Project DIR\binlub %GOPATH%\bin.

yu yang Jian
źródło
1

Ostrożnie podczas biegania

export GOPATH=$HOME

Załóżmy, że twój kod istnieje w określonych miejscach związanych z GOPATH. Zamiast tego możesz użyć dockera do uruchomienia dowolnego polecenia go:

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

A teraz możesz użyć dowolnego polecenia golang, na przykład:

go test github.com/<organization name>/<repository name> 
Omer Levi Hevroni
źródło
0

W systemie Windows moje okno cmd było już otwarte, gdy ustawiłem zmienną środowiskową GOPATH. Najpierw musiałem zamknąć cmd, a następnie ponownie otworzyć, aby zadziałał.

złoże
źródło
0

Problem polega na tym, że nie jesteś w katalogu pakietu, w którym znajduje się plik go z funkcją go main, a polecenie go install nie może znaleźć polecenia (plik go z funkcją główną go), które chcesz zainstalować.

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

a następnie uruchom:

$ go install 
Margach Chris
źródło
-1

W systemie OSX Mojave 10.14 gojest zwykle instalowany pod adresem /usr/local/go.

Dlatego skonfiguruj te ENV i powinieneś być gotowy.

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

Dodaj je również do swojego bash_profilelub zsh_profilejeśli działa.

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

Wskaźnik zerowy
źródło