Go install hatayla başarısız oluyor: GOPATH dışında xxx dizini için yükleme konumu yok


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

Projenin hangi yapıda olduğu önemli değil, her zaman aynı mesajla başarısız oluyor. Git inşa mükemmel çalışır.

İşte benim 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"

Bu Mac OSX Mountain Lion ve go homebrew ile kuruldu.

Yanıtlar:


116

Hiçbir bağımsız değişken sağlamazsanız go install, varsayılan olarak paketi geçerli dizine yüklemeye çalışır. Hata iletisi, geçerli dizinin bir parçası olmadığı için bunu yapamayacağını söylüyor $GOPATH.

Şunlardan birini yapabilirsiniz:

  • $GOPATH$ HOME ( export GOPATH=$HOME) öğenizi tanımlayın .
  • Kaynağınızı geçerli $GOPATH( mv ~/src/go-statsd-client /User/me/gopath) içine taşıyın .

Her ikisinden sonra, go-statsd-clientdizine girip yazmak da dosya sisteminin herhangi bir yerinden go installyazmaya başlar go install go-statsd-client. İnşa edilen ikili dosyalar girecektir $GOPATH/bin.

İlişkisiz bir öneri olarak, adın çakışmasını önlemek için muhtemelen paketinizi bir alan adıyla adlandırmak istersiniz (örneğin github.com/you/go-statsd-client, kaynak kodunuzu burada tutuyorsanız).


5
Benim durumumda bu hata bir $GOPATH/bindizin olmamasından kaynaklandı . Bu klasörü oluşturmak gerekliydi - GOBINenv var.
xentek

4
Hayal kırıklığınızı paylaşırken @RobertReiz, diğer birçok dilin aslında bunları kullandığını belirtmeliyim, ancak belki de o kadar görünür değiller. Örneğin, Python (sadeliği ile ünlü bir dil) PYTHONHOMEyerine GOROOTve PYTHONPATHyerine sahiptir GOPATH. Hatta (GC) C sahiptir LIBRARY_PATH, C_INCLUDE_PATHvb
Hut8

1
Sonra bu hatayı alıyorum export GOPATH=$PWD(bir Golang klon ağacının kökünde duran), cevabınız muhtemelen bu durumda hatayı açıklayamaz.
ulidtko

2
Benim için bunu GOPATH $ 'a koymak yeterli değildi. $ GOPATH / src /
Thomas

9
Eminim varlığını haklı çıkarmak için çok iyi bir neden vardır GOPATH, ancak dışarıdan bakıldığında, bu tamamen akılsız görünüyor. Neden sadece yerel olarak bir paket oluşturmak için küresel çevre değişkenlerini değiştirmem gerekiyor?
Alexander -

193

Herhangi bir OS X kullanıcısı ve gelecekteki ben için, GOBINyükleme sırasında kafa karıştırıcı mesajdan kaçınmak vego get

mkdir bin 
export GOBIN=$GOPATH/bin

4
AyarlamanızGOBIN gerekmez . Bunu $GOPATH/binbir fark yaratırsa, kurulumunuzda başka bir şey yanlıştır veya yapmamanız gereken bir şey yapıyorsunuz.
Dave C

29
@DaveC OS X'de de aynı sorunu yaşıyorum. GOBIN'i ayarlamak sorunu çözdü.
nJoshi

2
Çok teşekkür ederim, resmi OS X paketi ile ilgili bir şey yanlış görünüyor, gerçekten de 10.11.4 (El Capitan) için geçerli olan GOBIN'i ayarlamanızı gerektiriyor
Jonas D.

3
Bu, Ubuntu 16.04 için de doğru bir
çözümdür

1
Bu mükemmel maOS Sierra 10.12.3 üzerinde çalıştı Teşekkürler!
Greg Hilston

30

Go install komutunu GOPATH klasörünün dışındaki bir dizinde kullanıyorsunuz . GOBIN env değişkeninizi ayarlayın veya src klasörünü GOPATH içinde taşıyın.

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

Daha fazla bilgi: GO BUILD Kaynak kodu , satır 296


Yukarıdaki öneriyi denedim (ihracat GOPATH = $ HOME), daha sonra ilgili dizinime taşındım (kodumu yazıyorum) ve go install yazdım ... aynı sonuç go install: dizin için kurulum konumu yok ....
stian

296 Satırı yalnızca bir iade ifadesidir?
Felix Rabe

1
GOBIN
ortamımı

Bu çözüm için gittim.
Mihamina Rakotomandimby

19

Sen kurulum hem gerek GOPATHve GOBIN. Aşağıdakileri yaptığınızdan emin olun (lütfen ~/gotercih ettiğiniz ile değiştirin GOPATHve daha sonra değiştirin GOBIN). Bu test edilir Ubuntu 16.04 LTS.

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

Seçilen cevap benim için sorunu çözmedi.


Her ikisini de 16.04'te tanımladım ve bu benim için işe yaramadı.
Catskul

5

Seçtiğiniz GOPATH dizininde 3 dizin bulunmasını isteyeceksiniz.

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

Sonra go installya bazı programı (bin içinde çalıştırılabilir bir dosya koyar) ya da someLibrary (pkg içinde bir kitaplık koyar) içinden çalışırsınız.


1
Bu internette 2 saat aradıktan sonra benim için çalıştı.
vishalknishad

3

Windows'ta bu sorunu yaşadım.

Benim sorunum, %GOPATH%ortam değişkenimin

C:\Users\john\src\goworkspace

onun yerine

C:\Users\john\src\goworkspace\

Sonuna eksik eğik çizgi eklemek benim için düzeltildi.


1
kutsal inek beni potansiyel olarak çok saatlik bir baş ağrısından kurtardın. Ubuntu'dayım ama aynı sorunu yaşadım. Src / github.com / xyabz / ve her şey dışında prefacing klasör adları, klasör yapısı, hakkında son derece çalışkan oldu ama gitmek bana hatalar vermeye devam etti.
anon58192932

3

Değer için, işte benim .bash_profile, Atom ile bir mac üzerinde benim için iyi çalışıyor, Homebrew ile gittikten sonra:

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

2

Benim durumumda (OS X) olarak ben belirledik çünkü GOPATHhiç /home/username/go(kitap uyarınca) yerine/Users/username/go


2

Windows'dayım ve cmd'ye komut vererek go help gopathve talimattaki kalın metni okuyarak anladım ,

Bu yüklemeyi wnat kodu altında olup olmadığını ise ..BaseDir...\SomeProject\src\basic\set, GOPATH , sadece Taban Projesi DIR olmalıdır koduyla aynı konum olmamalıdır: ..BaseDir...\SomeProject.

GOPATH ortam değişkeni, Go kodunun aranacağı yerleri listeler. Unix'te, değer iki nokta üst üste işaretiyle ayrılmış bir dizedir. Windows'ta, değer noktalı virgülle ayrılmış bir dizedir. Plan 9'da değer bir listedir.

Ortam değişkeni ayarlanmamışsa, GOPATH varsayılan olarak kullanıcının ana dizinindeki "go" adlı bir alt dizine ($ HOME / go Unix,% USERPROFILE% \ go Windows), bu dizin bir Go dağıtımına sahip olmadıkça varsayılan olarak ayarlanır. Mevcut GOPATH'ı görmek için "go env GOPATH" komutunu çalıştırın.

Bkz https://golang.org/wiki/SettingGOPATH özel GOPATH ayarlamak için.

GOPATH'te listelenen her bir dizinin öngörülen bir yapısı olmalıdır:

Src dizini kaynak kodunu tutar. Src'nin altındaki yol, alma yolunu veya yürütülebilir adı belirler.

Pkg dizini kurulu paket nesnelerini tutar. Git ağacında olduğu gibi, her hedef işletim sistemi ve mimari çiftinin kendi pkg alt dizini vardır (pkg / GOOS_GOARCH).

DIR GOPATH'da listelenen bir dizinse, DIR / src / foo / bar'da kaynağı olan bir paket "foo / bar" olarak içe aktarılabilir ve derlenmiş formu "DIR / pkg / GOOS_GOARCH / foo / bar.a ".

Bin dizini derlenmiş komutları tutar. Her komut, kaynak dizini için adlandırılır, ancak yolun tamamı için değil, yalnızca son öğe. Yani, DIR / src / foo / quux'da kaynak bulunan komut DIR / bin / foo / quux'a değil, DIR / bin / quux'a kurulur. Yüklü komutlara ulaşmak için PATH'nize DIR / bin ekleyebilmeniz için "foo /" öneki çıkarılmıştır. GOBIN ortam değişkeni ayarlanırsa, komutlar DIR / bin yerine adlandırdığı dizine yüklenir. GOBIN mutlak bir yol olmalıdır.

İşte örnek bir dizin düzeni:

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)

..........

GOPATH Tabanı Projesi DIR seti olmuştur ve hala pencerelerde ayarlamak deneyebilirsiniz, bu sorunu var eğer Gobin olarak Base Project DIR\binya %GOPATH%\bin.


1

Koşarken dikkatli ol

export GOPATH=$HOME

Kodunuzun ilgili belirli yerlerde bulunduğunu varsayın GOPATH. Bunun yerine, herhangi bir go komutunu çalıştırmak için docker'ı kullanabilirsiniz:

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

Ve şimdi herhangi bir golang komutunu kullanabilirsiniz, örneğin:

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

0

GOPATH ortam değişkenini ayarladığımda pencerelerde cmd pencerem zaten açıktı. Önce cmd'yi kapatıp sonra etkili olabilmesi için tekrar açmam gerekiyordu.


0

Sorun, go main işlevi ile go dosyası olan paket dizininde bulunmamanız ve install'in kurmak istediğiniz komutu bulamamasıdır (go main fonksiyonu ile go dosyası).

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

ve sonra çalıştırın:

$ go install 

-1

OSX Mojave 10.14 tarihinde, gobir tipik kurulur /usr/local/go.

Bu nedenle, bu ENV'leri kurun ve gitmek için iyi olmalısınız.

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

Ayrıca, bunları kendinize bash_profileveya zsh_profileçalışırsa ekleyin .

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.