GOBIN ayarlanmadı: go install çalıştırılamaz


86

Main.go dosyam için özel paketimi yüklemeye çalışıyorum. Ancak koştuğumda

go install custom.go

Bu hatayı aldım

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

GOBIN'i nasıl ayarlarım?


16
BTW: Bu, bir paketi kurmanın tamamen yanlış bir yoludur. Bu asla işe yaramayacak. bireysel dosyaları değil paketlerigo install yükler . Lütfen tüm golang.org/cmd/go'yu okuyun ve dosyalarınızı nasıl kuracağınızı görün.
Volker

söylediğin için teşekkürler!
user3918985

2
Sanırım git inşa et bakıyorsun.
bunnybare

2
Bunun tamamen yanlış olduğundan emin değilim. GOBIN ayarlandığında, iki farklı davranış vardır: go build <gofile.go> kullanılırken, yürütülebilir dosya aynı klasörde oluşturulur. Go install <gofile.go> kullanılırken yürütülebilir dosya GOBIN'de oluşturulur.
Erez A. Korn

2
FWIW - Başlamak için varsayılan belgeler, tam olarak bunu yapmanızı önerir. golang.org/doc/install
Mike

Yanıtlar:


46

Güncelleme 2020: Go 1.11 ve beri Git modüllerinin tanıtımı , GOPATHartık proje başına gerekli değildir ve varsayılan~/go küresel araçlar için / yapacağınız proje go get.

1,16'ya gidin (Q1 2020) varsayılan GOBINolarak GOPATH[0]/bin .

Ama şimdilik, modül kullanan herhangi bir proje için, go install: no install location ...artık " " gibi bir hata mesajı almayacaksınız .


Orijinal cevap 2014:

GOPATHDeğişkeninizi kontrol edin .
Emin olmak:

  • kaynakların altında GOPATH/src
  • Eğer bir var binsenin GOPATH klasörü içinde klasör.

GOPATH ortam değişkenine bakın (burada 'DIR' bir GOPATHklasördür):

binDizin derlenmiş komutları tutar.
Her komut, kaynak dizini için adlandırılır, ancak tüm yol değil, yalnızca son öğesi adlandırılır. Yani, kaynak içinde olan komut DIR/src/foo/quuxiçine DIR/bin/quuxdeğil, içine kurulur DIR/bin/foo/quux. " foo/" Öneki kaldırılır, böylelikle yüklenen komutlara ulaşmak DIR/biniçin ön eki ekleyebilirsiniz PATH.

Eğer GOBINortam değişkeni ayarlanır, komutlar dizini yerine o isimleri yüklenir DIR/bin. GOBINmutlak bir yol olmalı.


Örneğin, bu iş parçacığı , aşağıdakilerin dışında bir go derleme yapıldığında ne olduğunu gösterir GOPATH/src:

Görünüşe göre ayarınız GOPATHayarlanmış ~/goancak siz go installkomutu çalıştırdınız~/dev/go

Go Build'i görün

Go yolu, Go kaynak kodunu içeren dizin ağaçlarının bir listesidir. Standart Go ağacında bulunamayan içe aktarmaları çözmek için danışılır.

Yaptıysanız go build, bir go install(hayır custom.go) da deneyebilirsiniz : tek bir dosya değil, paketi kurmak istiyorsunuz.


bunu mu diyorsun? $ PATH yankılaması yaptım ve şunu aldım: / 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

GOBIN yolunu belirledim ve bu benim için çalıştı

export GOBIN=[WorkspacePath]/bin

2
evet, bu doğru cevap. sadece bu GOPATH içinde / bin oluştur
swdev

7
Dışa aktarma yolundan sonra şu hatayı aldım cannot install, GOBIN must be an absolute path:(
lee

@lee kullandın mı ..yoksa ~yolunda belirttiğiniz? Bu hatayı aldım ve sadece /home/ben/bin/veya hatta gibi mutlak bir yola geçtim $HOME/bin/. Tam komutum şuydu (balık kabuğunda, v1.11'e gidin) env GOBIN=$HOME/bin/ go install testfile.go.
Benny Jobigan

40

Yeni başlayan biri olarak, çeşitli go komutlarını denediğimde (derleme, çalıştırma ve yükleme) bu hatayla karşılaştım. Kısacası, bir kurmaya gidemezsiniz dosya adı . Yalnızca bir paket kurabilirsiniz.

Bu kafa karıştırıcıydı çünkü şunu öğrenmiştim:

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

harika çalışıyor. Ancak yüklemenin neden işe yaramadığını anlayamadım:

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)

Hangi dizinde olduğum önemli değil:

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)

Bu karışıklık, go run'un yalnızca Go kaynak dosyalarıyla (.go ile biten dosya adları) çalışması ve go install'un yalnızca paketleri kabul etmesidir . Paketler, içe aktarma yollarına veya dosya sistemi yollarına göre adlandırılır. Böylece:

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

hepsi harika çalışıyor. İlki, içe aktarma yoluna göre paketi ifade eder ($ GOPATH = "/ home / nate / work", go araçları / home / nate / work / src içindeki kaynak kodunu arar), diğerleri dosya sistemi olarak yorumlanır önde gelen dönemler nedeniyle yollar.

Ayrıca GOPATH belgelerine bakın .


1
bu gerçek çözüm IMO'dur. go installdizinler üzerinde çalışır ve belirli bir go dosyası belirtirseniz, bu belirli soruna neden olabilir.
senseiwu

13

Aslında 2 farklı davranış türü vardır.

go install <package>

bu, Paketleri ve bağımlılıkları derleme ve kurma bölümünde belgelenmiştir GOPATH'ı doğru ayarlarsanız GOBIN'e ihtiyacınız yoktur.

go install <gofile>

bu belgelenmemiştir ve bu modda GOBIN env değişkenine ihtiyacınız vardır.


1
go install <gofile>belgelenmiştir, go help packageshangi go install --helpatıfta bulunur. Sorun, go install(1.9.2 ve önceki sürümlerde) tutarsız davranışa sahip olmasıdır, bir durumda gerektirir ve diğerinde GOBIN'in açıkça ayarlanmasını gerektirmez.
Stevo Slavić

7

Geçmiş yanıtların işaret ettiği gibi, GOPATH ortamınız çalışma alanınıza doğru bir şekilde ayarlanmışsa, GOBIN env değişkenini ayarlamanıza gerek yoktur.

Lütfen $ go env | grep -i "^ GO" ve GOROOT'un GO kaynak kurulumunuza ve GOPATH'ın çalışma alanınıza işaret edip etmediğini kontrol etmek için GOROOT ve GOPATH'a bakın.

Her şey doğruysa, pkg.go'nuzun bulunduğu alt dizine gidin, ardından önce $ go build (dosya adı olmadan) ve $ go install (tekrar dosya adınızla) çalıştırın, ekranda herhangi bir hata mesajı görmezseniz, paket, çalışma alanınızda / pkg / sizin /../ paketiniz.a'da hazır


7

Cygwin ile pencerelerde GOBIN'i $ GOPATH / bin olarak ayarlamak iyi bir fikir gibi görünüyor.

ve Windows dosya adı ayırıcısından doğru şekilde çıkmayı unutmayın:

$ 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

İçin *nixsistemde, nereye bakmak goaşağıdaki komutu çalıştırarak, yüklenir:

$ which go

hangi çıktı diyelim:

/usr/local/go/bin/go

ardından aşağıdaki girişleri içine ~/.bash_profileveya içine ekleyin ~/.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

Not: Kaynak yapmayı ~/.bash_profileveya ~/.zshrcaşağıdaki gibi yapmayı unutmayın :

$ source ~/.bash_profile

5
Gerçekten çalıştırılabilir geliştirme dosyalarının düşürülmesini istiyor musunuz /usr/local/go/bin?
Dolph

1

Ayarı ile ilgili olarak GOBINdaha önce belirlemiş olduğu ve sadece güvenerek değil değişken sürümünü GOPATH:

  1. GOBINbir paketimiz yoksa, yani dosya doğrudan GOPATHdizinde ise gereklidir . Bu, öğrenciler olarak Go özelliklerini denediğimizde büyük olasılıkla

  2. Tipik Go projeleri için, dosyalar paket dizinlerinin altındadır. Bunlar için GOPATHyeterince iyi.

  3. Diğer bir deyişle, aşağıdaki çözümlerin ikisi de işe yarayacaktır: a. Set GOBIN$ GOPATH / bin olarak açıkça b [Sadece öğrenme amaçları için, önleyebilirsiniz]. Paket adınız olacak bir alt dizin oluşturun ve .go dosyalarını buraya taşıyın

  4. Sanırım Go yardımcı programları yukarıdaki hatayı kaldırmalı ve senaryoyu daha iyi ele almalı - argümanın bir dizin mi yoksa bir kaynak dosya mı olduğuna bağlı olarak


1

İçin WINDOWS kullanıcıları

Bir komut istemi açın ( Win+ rardından yazın cmd) veya bir powershell penceresi ( Win+ xsonra yazın i).

GOPATH'ı Ayarlama

NOT: Go kurulumunuzla aynı yol GOPATH olmamalıdır .

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

Aşağıdaki bağlantıda daha fazla ayrıntı https://github.com/golang/go/wiki/SettingGOPATH#windows

GOBIN ayarlanıyor

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

Golang tarafından sağlanan kod örneğine bakmanızı tavsiye ederim. Bana çok yardımcı oldu. https://golang.org/doc/code.html#Command


1

Windows'ta:

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

go envGOBIN'in ayarlandığını komutla onaylayın , ardından go installkomut yürütülebilir dosyayı bin dizinine düzgün bir şekilde kaydeder.


1

Ben de aynı sorunu yaşadım (GOBIN'in ayrı ayarlanmasına gerek yoktur), şunlara sahip olduğunuzdan emin olun

  1. GOPATH ayarlandı (bu aynı zamanda GOBIN'i otomatik olarak $ GOPATH / bin olarak ayarlar)
  2. GOPATH aşağıdaki dizinlere sahiptir bin, pkg, src
  3. custom.go, src / <your_module> altına yerleştirilir
  4. o zaman koş go install <your_module>
  5. derlenmiş ikilinin (<your_module>) kontrolünü bin klasörü altında bulabilirsiniz

0

Sen gerek yok Gobin, $ Bir ayarladıysanız $ GOPATH düzgün. Öyleyse, projenizin $ GOPATH / src klasöründe bulunup bulunmadığını tekrar kontrol edin .


0

Gönderen https://golang.org/cmd/go/#hdr-Environment_variables :

GOBIN 'go install' komutunun kurulacağı dizin.

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

GOBIN ortam değişkeni ayarlanmışsa, komutlar DIR / bin yerine adlandırdığı dizine yüklenir. GOBIN mutlak bir yol olmalıdır.

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

Modüle duyarlı modda, GOPATH artık bir derleme sırasında içe aktarmaların anlamını tanımlamaz, ancak indirilen bağımlılıkları (GOPATH / pkg / mod içinde) ve yüklü komutları (GOBIN ayarlanmadıkça GOPATH / bin içinde) depolar.

Bu nedenle, temel olarak varsayılan ikili kurulum konumunu (yani $GOPATH/bin) geçici veya kalıcı olarak geçersiz kılmak için GOBIN'i kullanabilirsiniz . 1 dosyalık go "komut dosyasını" kullanarak başarıyla yükledim env GOBIN=$HOME/bin/ go install testfile.go. Bu, go v1.11 kullanılarak yapıldı.


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.