GOBINが設定されていません:goinstallを実行できません


86

main.goファイルのカスタムパッケージをインストールしようとしています。しかし、私が走ったとき

go install custom.go

このエラーが発生しました

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

GOBINを設定するにはどうすればよいですか?


16
ところで:これはパッケージをインストールするための完全に間違った方法です。これは決して機能しません。個々のファイルではなくパッケージをgo installインストールしますgolang.org/cmd/goをすべて読んで、ファイルの設定方法を確認してください。
Volker 2014

ヘッドアップをありがとう!
user3918985 2014

2
私はあなたがgobuildを探していると思います。
bunnybare 2014

2
それが完全に間違っていることに同意するかどうかはわかりません。GOBINが設定されている場合、2つの異なる動作があります。gobuild<gofile.go>を使用する場合、実行可能ファイルは同じフォルダーに作成されます。go install <gofile.go>を使用する場合、実行可能ファイルはGOBINで作成されます。
Erez A. Korn 2015年

2
FWIW-開始するためのデフォルトのドキュメントでは、これを正確に行うことをお勧めします。golang.org/doc/install
Mike Buckbee 2016年

回答:


46

2020年の更新:Go 1.11およびGoモジュール導入以降、GOPATHプロジェクトごとに不要になり、デフォルト~/goでグローバルツール/プロジェクトになりgo getます。

Go 1.16(2020年第1四半期)はデフォルトGOBINGOPATH[0]/bin

ただし、今のところ、モジュールを使用するプロジェクトでは、「go install: no install location ...」のようなエラーメッセージは表示されなくなります。


2014年の元の回答:

GOPATH変数を確認してください。
確認してください:

  • あなたの情報源は下にあります GOPATH/src
  • あなたは持っているbinあなたのGOPATHフォルダ内のフォルダを。

GOPATH環境変数(「DIR」はGOPATHフォルダー)を参照してください。

binディレクトリには、コンパイルされたコマンドを保持しています。
各コマンドはそのソースディレクトリにちなんで名付けられていますが、パス全体ではなく、最後の要素のみに名前が付けられています。つまり、ソースが入っているコマンドは、ではなくにDIR/src/foo/quuxインストールされます。「あなたが追加できるように、」接頭辞が取り除かれ、あなたにインストールされたコマンドで取得します。DIR/bin/quuxDIR/bin/foo/quuxfoo/DIR/binPATH

GOBIN環境変数が設定されている場合、コマンドは、の代わりに名前が付けられたディレクトリにインストールされますDIR/binGOBIN絶対パスである必要があります。


たとえば、このスレッドは、goビルドが次の外部で実行された場合に何が起こるかを示していますGOPATH/src

GOPATH設定されているよう~/goですが、go installコマンドを実行しました~/dev/go

参照ゴービルド

Goパスは、Goソースコードを含むディレクトリツリーのリストです。標準のGoツリーにないインポートを解決するために参照されます。

完了している場合はgo buildgo install(no custom.go)を試すこともできます。単一のファイルではなく、パッケージをインストールします。


これはどういう意味ですか?$ PATHをエコーし​​て、これを取得しました:/ 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 2014

76

GOBINパスを設定しましたが、それでうまくいきました

export GOBIN=[WorkspacePath]/bin

2
ええ、これは正解です。そのGOPATHに/ binを作成するだけです
swdev 2015

7
パスをエクスポートした後、エラーが発生しましたcannot install, GOBIN must be an absolute path:(
lee

@lee使用しました..~、または指定したパスで使用しましたか?そのエラーが発生し、/home/ben/bin/またはなどの絶対パスに切り替えました$HOME/bin/。私の完全なコマンドは(fishshellではv1.11に移動)env GOBIN=$HOME/bin/ go install testfile.goでした。
ベニージョビガン

40

初心者として、さまざまなgoコマンド(ビルド、実行、インストール)を試しているときに、このエラーに遭遇しました。要するに、あなたがすることはできませんインストール行くfilename.goを。パッケージのみをインストールできます。

私はそれを学んだので、これは混乱しました:

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

よく働く。しかし、インストールが機能しない理由を理解できませんでした。

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)

私がどのディレクトリにいたかに関係なく:

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)

この混乱は、go run はGoソースファイル(.goで終わるファイル名)でのみ機能し、goinstallはパッケージのみを受け入れるため です。パッケージには、インポートパスまたはファイルシステムパスによって名前が付けられます。したがって:

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

すべてうまくいきます。1つ目はインポートパスでパッケージを参照し($ GOPATH = "/ home / nate / work"の場合、goツールは/ home / nate / work / srcでソースコードを検索します)、その他はファイルシステムとして解釈されます。先行期間のためのパス。

GOPATHのドキュメントも参照してください。


1
これが真のソリューションIMOです。go installディレクトリで機能し、特定のgoファイルを指定すると、この特定の問題が発生する可能性があります。
senseiwu

13

実際には、2種類の動作があります。

go install <package>

これは、パッケージと依存関係のコンパイルとインストールに記載され ています。GOPATHを正しく設定すれば、GOBINは必要ありません。

go install <gofile>

これは文書化されておらず、このモードではGOBIN環境変数が必要です。


1
go install <gofile>が文書化さgo help packagesれており、でgo install --help参照されています。問題は、go install(1.9.2以前では)動作に一貫性がないことです。ある場合にはそれが必要であり、別の場合にはGOBINを明示的に設定する必要がありません。
STEVOスラブ

7

以前の回答で指摘されているように、GOPATH envがワークスペースに正しく設定されている場合は、GOBINenv変数を設定する必要はありません。

$ go env |を実行して、go環境変数を確認してください。grep -i "^ GO"を実行し、GOROOTとGOPATHを探して、GOROOTがGOソースインストールを指しているかどうか、GOPATHがワークスペースを指しているかどうかを確認します。

すべてが正しい場合は、yourpkg.goが存在するサブディレクトリに移動し、最初に$ go build(ファイル名なし)を実行し、次に$ go install(ファイル名付き)を実行します。画面にエラーメッセージが表示されない場合は、パッケージはworkspace / pkg / youros /../yourpackage.aで準備ができています


7

cygwinを使用するWindowsでは、GOBINを$ GOPATH / binに設定することをお勧めします。

そして、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

以下のため*nixのシステム、どこを見れgo次のコマンドを実行し、インストールされています:

$ which go

どの出力を言いましょう:

/usr/local/go/bin/go

次に、次のエントリを~/.bash_profileまたはに追加します~/.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:次のように、~/.bash_profileまたはを調達することを忘れないでください~/.zshrc

$ source ~/.bash_profile

4
本当に開発実行可能ファイルをドロップしたい/usr/local/go/binですか?
ドルフ

1

GOBINそれを必要とせず、ただ頼る変数バージョンの設定に関してGOPATH

  1. GOBINパッケージがない場合、つまりファイルがGOPATHディレクトリに直接ある場合は、が必要です。これは、学習者としてGo機能を試しているときに発生する可能性があります

  2. 一般的なGoプロジェクトの場合、ファイルはパッケージディレクトリの下にあります。これらについてGOPATHは、十分です。

  3. つまり、次の両方のソリューションが機能します。GOBIN$ GOPATH / binとして明示的に設定します[学習目的でのみ、回避できます] b。パッケージ名となるサブディレクトリを作成し、.goファイルをそのサブディレクトリに移動します

  4. 引数がディレクトリであるかソースファイルであるかに基づいて、Goユーティリティは上記のエラーを削除し、シナリオをより適切に処理する必要があると思います


1

以下のためのWINDOWSのユーザー

コマンドプロンプト(Win+r次に入力cmd)またはPowerShellウィンドウ(Win+x次に入力i)を開きます。

GOPATHの設定

注: Goインストールと同じパスであってGOPATH なりません

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

詳細については、https://github.com/golang/go/wiki/SettingGOPATH#windowsの下のリンクを ご覧ください。

GOBINの設定

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

golangが提供するコード例を確認することをお勧めします。それは私を大いに助けました。 https://golang.org/doc/code.html#Command


1

Windowsの場合:

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

go envコマンドでGOBINが設定されていることを確認してから、go installコマンドは実行可能ファイルをbinディレクトリに適切に保存します。


1

私も同じ問題を抱えていました(GOBINを個別に設定する必要はありません)。次のものがあることを確認してください

  1. GOPATHが設定されます(これにより、GOBINが$ GOPATH / binとして自動的に設定されます)
  2. GOPATHには次のディレクトリがありますbin、pkg、src
  3. custom.goはsrc / <your_module>の下に配置されます
  4. 次に実行します go install <your_module>
  5. コンパイルされたバイナリ(<your_module>)のチェックはbinフォルダーにあります。

0

$ GOPATHを適切に設定していれば、$ GOBINは必要ありません。その場合は、プロジェクトが$ GOPATH / srcフォルダーにあるかどうかを再確認してください。


0

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

GOBIN'goinstall 'がコマンドをインストールするディレクトリ。

およびhttps://golang.org/cmd/go/#hdr-GOPATH_environment_variable

GOBIN環境変数が設定されている場合、コマンドはDIR / binではなく名前の付いたディレクトリにインストールされます。GOBINは絶対パスである必要があります。

およびhttps://golang.org/cmd/go/#hdr-Modules__module_versions__and_more

モジュール認識モードでは、GOPATHはビルド中のインポートの意味を定義しなくなりましたが、ダウンロードされた依存関係(GOPATH / pkg / mod)とインストールされたコマンド(GOBINが設定されていない限りGOPATH / bin)を保存します。

したがって、基本的には、GOBINを使用して、デフォルトのバイナリインストール場所(つまり$GOPATH/bin)を一時的または永続的にオーバーライドできるようです。を使用して1ファイルのgo "script"をインストールすることに成功しましたenv GOBIN=$HOME/bin/ go install testfile.go。これは、gov1.11を使用して行われました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.