GOBIN nie jest ustawiony: nie można uruchomić go install


86

Próbuję zainstalować niestandardowy pakiet dla mojego pliku main.go. Jednak kiedy biegałem

go install custom.go

Mam ten błąd

go install: no install location for .go files listed on command line (GOBIN not set)

Jak ustawić GOBIN?


16
BTW: To jest całkowicie błędny sposób instalacji pakietu. To się nigdy nie uda. go installinstaluje pakiety, a nie pojedyncze pliki. Przeczytaj całą stronę golang.org/cmd/go i zobacz, jak skonfigurować swoje pliki.
Volker,

dzięki za ostrzeżenie!
user3918985

2
Myślę, że szukasz go build.
bunnybare

2
Nie jestem pewien, czy zgadzam się, że jest to całkowicie błędne. Gdy GOBIN jest ustawiony, istnieją dwa różne zachowania: Podczas używania go build <gofile.go> plik wykonywalny jest tworzony w tym samym folderze. Używając go install <gofile.go>, plik wykonywalny tworzony jest w GOBIN.
Erez A. Korn

2
FWIW - domyślna dokumentacja na początek zaleca, abyś zrobił dokładnie to. golang.org/doc/install
Mike Buckbee

Odpowiedzi:


46

Aktualizacja 2020: od 1.11 idź i wprowadzenie modułów Go , GOPATHnie jest już potrzebne na projekt, a domyślnie~/go dla globalnych narzędzi / Project byś go get.

Idź 1,16 (Q1 2020) powinny domyślnych GOBINdo GOPATH[0]/bin .

Ale na razie w przypadku każdego projektu używającego modułów nie będzie już komunikatu o błędzie typu „ go install: no install location ...”.


Oryginalna odpowiedź 2014:

Sprawdź swoją GOPATHzmienną.
Upewnić się:

  • twoje źródła są pod GOPATH/src
  • masz binfolder w folderze GOPATH.

Zobacz zmienną środowiskową GOPATH (gdzie „DIR” to GOPATHfolder):

binKatalog 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 DIR/src/foo/quuxjest instalowane w programie DIR/bin/quux, a nie DIR/bin/foo/quux. W „ foo/” prefiks jest usuwany, dzięki czemu można dodać DIR/bindo swojej PATHdostać na zainstalowanych poleceń.

Jeśli GOBINzmienna środowiskowa jest ustawiona, polecenia są instalowane w katalogu, którego nazwa zamiast DIR/bin. GOBINmusi być ścieżką absolutną.


Na przykład ten wątek ilustruje, co dzieje się w przypadku, gdy kompilacja go odbywa się poza GOPATH/src:

Wygląda na to, że twój GOPATHjest ustawiony na, ~/goale uruchomiłeś go installpolecenie~/dev/go

Zobacz Go Build

Ścieżka Go to lista drzew katalogów zawierających kod źródłowy Go. Jest konsultowany w celu rozwiązania importu, którego nie można znaleźć w standardowym drzewie Go.

Jeśli już zrobiłeś go build, możesz również spróbować go install(nie custom.go): chcesz zainstalować pakiet, a nie pojedynczy plik.


masz na myśli to? Wykonałem echo $ PATH i otrzymałem to: / Users / apple / bin: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin: / usr / local / go / bin: / usr / local / mysql / bin
user3918985

76

Ustawiłem ścieżkę GOBIN i to zadziałało

export GOBIN=[WorkspacePath]/bin

2
tak, to jest poprawna odpowiedź. po prostu utwórz / bin w tym GOPATH
swdev

7
Po ścieżce eksportu wyskoczył mi błąd cannot install, GOBIN must be an absolute path:(
lee

@lee Czy użyłeś ..lub ~w określonej ścieżce? Otrzymałem ten błąd i właśnie przełączyłem się na ścieżkę absolutną, taką jak /home/ben/bin/lub nawet $HOME/bin/. Moje pełne polecenie brzmiało (w fishshell, przejdź do wersji 1.11) env GOBIN=$HOME/bin/ go install testfile.go.
Benny Jobigan

40

Jako początkujący napotkałem ten błąd, gdy próbowałem różnych poleceń go (kompiluj, uruchamiaj i instaluj). Krótko mówiąc, nie można iść zainstalować na filename.go . Możesz zainstalować tylko pakiet.

To było zagmatwane, ponieważ dowiedziałem się, że:

nate:~/work/src/dir $ go run hello/hello.go
hello, world.

działa świetnie. Ale nie mogłem zrozumieć, dlaczego instalacja nie działa:

nate:~/work/src/dir $ go install hello/hello.go 
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
    /opt/go/src/hello (from $GOROOT)
    /home/ubuntu/work/src/hello (from $GOPATH)

Bez względu na katalog, w którym byłem:

nate:~/work/src/dir $ cd hello
nate:~/work/src/dir/hello $ go install hello.go 
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir/hello $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
    /opt/go/src/hello (from $GOROOT)
    /home/ubuntu/work/src/hello (from $GOPATH)

To zamieszanie jest spowodowane tym, że narzędzie go run działa tylko z plikami źródłowymi Go (nazwy plików kończące się na .go), a polecenie go install akceptuje tylko pakiety. Pakiety są nazywane według ich ścieżek importu lub ścieżek do systemu plików. A zatem:

nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .

wszystko działa świetnie. Pierwsza odnosi się do pakietu poprzez ścieżkę importu (zakładając, że $ GOPATH = "/ home / nate / work", narzędzia go szukają kodu źródłowego w / home / nate / work / src), pozostałe są interpretowane jako system plików ścieżki ze względu na wiodące okresy.

Zobacz także dokumentację GOPATH .


1
to jest prawdziwe rozwiązanie IMO. go installdziała na katalogach i jeśli określisz konkretny plik go, może to spowodować ten konkretny problem.
senseiwu

13

W rzeczywistości istnieją 2 różne rodzaje zachowań.

go install <package>

jest to udokumentowane w Kompilowanie i instalowanie pakietów i zależności Nie potrzebujesz GOBIN, jeśli ustawisz GOPATH poprawnie.

go install <gofile>

nie jest to udokumentowane i potrzebujesz zmiennej GOBIN env w tym trybie.


1
go install <gofile>jest udokumentowany, w go help packagesktórym się go install --helpodwołuje. Problem polega na tym, że go install(w wersji 1.9.2 i wcześniejszych) ma niespójne zachowanie, w jednym przypadku wymaga, aw innym nie wymaga jawnego ustawienia GOBIN.
Stevo Slavić

7

Jak wskazywały poprzednie odpowiedzi, jeśli twój GOPATH env jest poprawnie ustawiony na twój obszar roboczy, nie musisz ustawiać zmiennej GOBIN env.

Sprawdź zmienne środowiskowe go, uruchamiając $ go env | grep -i "^ GO" i poszukaj GOROOT i GOPATH, aby sprawdzić, czy GOROOT wskazuje na twoją instalację źródłową GO, a GOPATH wskazuje na twój obszar roboczy.

Jeśli wszystko jest w porządku, przejdź do podkatalogu, w którym znajduje się plik pkg.go, a następnie uruchom najpierw $ go build (bez nazwy pliku), a następnie $ go install (ponownie bez nazwy pliku). Jeśli nie widzisz żadnego komunikatu o błędzie na ekranie, pakiet jest gotowy w Twoim obszarze roboczym / pkg / youros /../ yourpackage.a


7

W oknach z cygwin dobrym pomysłem wydaje się ustawienie GOBIN na $ GOPATH / bin.

i pamiętaj, aby odpowiednio uciec z separatora nazwy pliku systemu Windows:

$ echo $GOROOT
C:\Go\

carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode

carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin

5

W przypadku *nixsystemu sprawdź, gdzie gojest zainstalowany, wykonując następujące polecenie:

$ which go

które wyjście powiedzmy:

/usr/local/go/bin/go

następnie dodaj następujące wpisy w ~/.bash_profilelub w ~/.zshrc:

export GOROOT=/usr/local/go
export GOPATH=$GOROOT/src //your-go-workspace
export GOBIN=$GOROOT/bin //where go-generate-executable-binaries

PATH=$PATH:$GOPATH:$GOBIN

export PATH

PS: Nie zapomnij o źródle ~/.bash_profilelub ~/.zshrcw następujący sposób:

$ source ~/.bash_profile

4
Czy naprawdę chcesz, aby wrzucono do niego pliki wykonywalne dla programistów /usr/local/go/bin?
Dolph

1

Odnośnie ustawienia GOBINwersji zmiennej nie wymagającej tego i polegającej tylko na GOPATH:

  1. GOBINjest wymagane, jeśli nie mamy pakietu, czyli plik znajduje się bezpośrednio w GOPATHkatalogu. Jest to prawdopodobne, gdy jako uczniowie wypróbowujemy funkcje Go

  2. W przypadku typowych projektów Go pliki znajdują się w katalogach pakietów. Do tego GOPATHwystarczy.

  3. Innymi słowy, sprawdzą się oba poniższe rozwiązania: a. Ustaw GOBINjawnie jako $ GOPATH / bin [tylko do celów edukacyjnych, można tego uniknąć] b. Utwórz podkatalog, który będzie nazwą Twojego pakietu i przenieś do niego pliki .go

  4. Wydaje mi się, że narzędzia Go powinny usunąć powyższy błąd i lepiej obsłużyć scenariusz - w oparciu o to, czy argument jest katalogiem, czy plikiem źródłowym


1

Dla użytkowników WINDOWS

Otwórz wiersz polecenia ( Win+ rnastępnie wpisz cmd) lub okno PowerShell ( Win+ xnastępnie wpisz i).

Ustawianie GOPATH

UWAGA: GOPATH nie może być tą samą ścieżką, co instalacja Go.

go env -w GOPATH=c:\your-go-work

Więcej szczegółów w linku poniżej https://github.com/golang/go/wiki/SettingGOPATH#windows

Ustawianie GOBIN

go env -w GOBIN=C:\somewhere\else\bin

Polecam sprawdzić przykład kodu dostarczony przez golang. Bardzo mi to pomogło. https://golang.org/doc/code.html#Command


1

W systemie Windows:

go env -w GOBIN=C:\Users\yourname\go\bin

Potwierdź za pomocą go envpolecenia, że ​​GOBIN jest ustawiony, a następnie go installpolecenie poprawnie zapisze plik wykonywalny w katalogu bin.


1

Ja też miałem ten sam problem (GOBIN nie musi być ustawiany osobno), upewnij się, że masz następujące

  1. GOPATH jest ustawiony (to również automatycznie ustawia GOBIN jako $ GOPATH / bin)
  2. GOPATH ma następujące katalogi bin, pkg, src
  3. custom.go znajduje się w src / <your_module>
  4. następnie uruchomić go install <your_module>
  5. możesz znaleźć sprawdzenie skompilowanego pliku binarnego (<your_module>) w folderze bin

0

Nie potrzebujesz $ GOBIN, jeśli poprawnie ustawiłeś $ GOPATH . Jeśli tak, po prostu sprawdź ponownie, czy projekt znajduje się w folderze $ GOPATH / src .


0

Z https://golang.org/cmd/go/#hdr-Environment_variables :

GOBIN Katalog, w którym polecenie „go install” zainstaluje polecenie.

i https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :

Jeśli ustawiona jest zmienna środowiskowa GOBIN, komendy są instalowane w katalogu, którego nazwa określa zamiast DIR / bin. GOBIN musi być ścieżką absolutną.

i https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more

W trybie obsługi modułów GOPATH nie definiuje już znaczenia importu podczas budowania, ale nadal przechowuje pobrane zależności (w GOPATH / pkg / mod) i zainstalowane polecenia (w GOPATH / bin, chyba że ustawiono GOBIN).

Wydaje się więc, że w zasadzie można użyć GOBIN do tymczasowego lub trwałego nadpisania domyślnej lokalizacji instalacji binarnej (tj $GOPATH/bin.). Udało mi się zainstalować 1-plikowy skrypt go przy użyciu env GOBIN=$HOME/bin/ go install testfile.go. Dokonano tego za pomocą go v1.11.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.