Goインストールがエラーで失敗する:GOPATH外のディレクトリxxxのインストール場所がない


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

プロジェクトがどのような構造であっても、常に同じメッセージで失敗します。ビルドは完全に機能します。

これが私の 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"

これはMac OSX Mountain Lionにあり、goは自作でインストールされました。

回答:


116

に引数を指定しない場合go install、デフォルトでは、現在のディレクトリにパッケージをインストールしようとします。現在のディレクトリはあなたの一部ではないので、エラーメッセージはそれを行うことができないことを教えています$GOPATH

次のいずれかを行うことができます。

  • $GOPATH$ HOME(export GOPATH=$HOME)に定義します。
  • ソースを現在の内に移動します$GOPATHmv ~/src/go-statsd-client /User/me/gopath)。

どちらの場合でも、go-statsd-clientディレクトリに移動して入力go installするとgo install go-statsd-client、ファイルシステムのどこからでも入力できます。ビルドされたバイナリはに入り$GOPATH/binます。

無関係な提案として、おそらく名前の衝突を避けるために、ドメイン名を使用してパッケージの名前空間を設定することをお勧めします(たとえばgithub.com/you/go-statsd-client、ソースコードを保持している場合)。


5
私の場合、このエラーは$GOPATH/binディレクトリがないために発生しました。このフォルダを作成する必要がありましたGOBIN-env var を設定する必要はありませんでした。
xentek 2015年

4
@RobertReiz私があなたの不満を共有している間、私は他のほとんどの言語が実際にこれらを使用していることを指摘しなければなりませんが、おそらくそれらはそれほど目に見えません。たとえば、Python(その単純さで有名な言語)には、のPYTHONHOME代わりにGOROOTとのPYTHONPATH代わりにがありGOPATHます。偶数(GC)Cを有しているLIBRARY_PATHC_INCLUDE_PATHなど
Hut8

1
私は後にこのエラーを取得するexport GOPATH=$PWD(Golangクローンツリーのルートに立って)、あなたの答えは、おそらくこのような場合にはエラーを説明することはできません。
ulidtko

2
私にとっては、$ GOPATHに入れるだけでは不十分でした。$ GOPATH / src /以下のディレクトリにある必要があります
Thomas

9
の存在を正当化する正当な理由があると私は確信していますがGOPATH、外部から見ると、これは完全に無知に思えます。ローカルでパッケージをビルドするためだけにグローバル環境変数を変更する必要があるのはなぜですか🤔–
Alexander-

191

すべてのOS Xユーザーと将来の私にとって、GOBINインストールとこの混乱するメッセージを回避するように設定する必要があります。go get

mkdir bin 
export GOBIN=$GOPATH/bin

4
あなたはする必要はありませんセットGOBIN。それを設定して$GOPATH/bin違いが出る場合は、セットアップに何か他の問題があるか、またはすべきでないことをしています。
Dave C

29
@DaveC私もOS Xで同じ問題を抱えています。GOBINを設定すると修正されました。
nJoshi

2
どうもありがとう、それは間違っている確かにあなたは10.11.4(エルキャピタン)のためにまだ有効GOBINを設定するために必要とされる公式のOS Xパッケージで何かのように見える
ジョナスD.

3
これはUbuntu 16.04の正しい修正であり、http
//golang.org/dl/

1
これはmaOS Sierra 10.12.3で問題なく動作しました。ありがとうございます。
グレッグヒルストン2017

30

GOPATHフォルダー以外のディレクトリにgo installを使用しています。GOBIN環境変数を設定するか、srcフォルダをGOPATH内に移動します。

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

詳細:GO BUILDソースコード、行296


上記の提案(エクスポートGOPATH = $ HOME)を試してから、関連するディレクトリ(コードを記述している場所)に移動し、go install ... same result go install:no install location for directory ....
stianと入力しました

296行目は単にreturnステートメントですか?
Felix Rabe 2014年

1
私はGOBIN環境を設定するのを忘れていました
cevaris

私はこの解決策に行きました。
Mihamina Rakotomandimby

19

GOPATHとの両方を設定する必要がありますGOBIN。次のことを行っていることを確認してください(~/go希望するものに置き換えて、GOPATH後で変更してくださいGOBIN)。これはでテストされていUbuntu 16.04 LTSます。

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

選ばれた答えは私にとって問題を解決しませんでした。


16.04で両方を定義しましたが、これはうまくいきませんでした。
Catskul 2018年

5

選択したGOPATHディレクトリ内に3つのディレクトリが必要です。

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

次にgo install、someProgram(binに実行可能ファイルを配置)またはsomeLibrary(pkgにライブラリを配置)の内部から実行します。


1
これは、インターネットで2時間検索したところ、うまくいきました。
vishalknishad

3

Windowsでこの問題が発生しました。

私の問題は、%GOPATH%環境変数が

C:\Users\john\src\goworkspace

の代わりに

C:\Users\john\src\goworkspace\

不足している末尾のスラッシュを最後に追加すると、修正されました。


1
数時間に及ぶ可能性のある頭痛から私を救った聖なる牛。私はUbuntuにいますが、同じ問題がありました。フォルダー名、フォルダー構造、src / github.com / xyabz /を前に付けること、およびインストール以外のすべてについて非常に勤勉で、エラーが発生し続けました。
anon58192932

3

それが価値があるもののために、ここに私の.bash_profileがあります、それはHomebrewでgoをインストールした後、Atomを備えたMacで私にとってうまくいきます:

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

2

私の場合(OS X )ではなく(本に従って)に設定GOPATHしたため/home/username/goです/Users/username/go


2

私はWindowsを使用していますgo help gopath。cmdにコマンドを与えて、命令の太字のテキストを読んで、

つまり、インストールするコードがにある場合..BaseDir...\SomeProject\src\basic\setGOPATHはコードと同じ場所ではなく、ベースプロジェクトのDIR:のみにする必要があります..BaseDir...\SomeProject

GOPATH環境変数には、Goコードを探す場所がリストされています。Unixでは、値はコロンで区切られた文字列です。Windowsでは、値はセミコロンで区切られた文字列です。プラン9では、値はリストです。

環境変数が設定されていない場合、GOPATHはデフォルトで、ユーザーのホームディレクトリ(UNIXでは$ HOME / go、Windowsでは%USERPROFILE%\ go)の "go"という名前のサブディレクトリに設定されます。「go env GOPATH」を実行して、現在のGOPATHを確認します。

https://golang.org/wiki/SettingGOPATHを参照してくださいカスタムGOPATHを設定するには、 //golang.org/wiki/SettingGOPATHを。

GOPATHにリストされている各ディレクトリには、所定の構造が必要です。

srcディレクトリはソースコードを保持します。srcの下のパスは、インポートパスまたは実行可能ファイルの名前を決定します。

pkgディレクトリは、インストールされたパッケージオブジェクトを保持します。Goツリーと同様に、各ターゲットオペレーティングシステムとアーキテクチャのペアには、pkgの独自のサブディレクトリ(pkg / GOOS_GOARCH)があります。

DIRがGOPATHにリストされているディレクトリの場合、ソースがDIR / src / foo / barにあるパッケージは「foo / bar」としてインポートでき、コンパイルされた形式が「DIR / pkg / GOOS_GOARCH / foo / bar.a」にインストールされます。 」

binディレクトリには、コンパイルされたコマンドが格納されています。各コマンドは、ソースディレクトリに基づいて名前が付けられますが、パス全体ではなく、最後の要素のみに名前が付けられます。つまり、ソースがDIR / src / foo / quuxにあるコマンドは、DIR / bin / foo / quuxではなく、DIR / bin / quuxにインストールされます。「foo /」接頭辞が削除されているため、PATHにDIR / binを追加して、インストールされているコマンドを取得できます。GOBIN環境変数が設定されている場合、コマンドは、DIR / binではなく、指定したディレクトリにインストールされます。GOBINは絶対パスでなければなりません。

次に、ディレクトリレイアウトの例を示します。

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がBase Project DIRに設定されているにもかかわらずこの問題が発生する場合は、WindowsでGOBINBase Project DIR\binまたはとして 設定してみてください%GOPATH%\bin


1

走る時は注意

export GOPATH=$HOME

コードがに関連する特定の場所に存在すると想定してくださいGOPATH。したがって、代わりに、Dockerを使用して任意のgoコマンドを実行できます。

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

そして今、あなたは任意のgolangコマンドを使うことができます、例えば:

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

0

Windowsでは、GOPATH環境変数を設定したときに、cmdウィンドウがすでに開いていました。最初にcmdを閉じてから再起動して、コマンドを有効にする必要がありました。


0

問題は、go main関数を含むgoファイルがあるパッケージディレクトリにいないため、go installがインストールするコマンド(go main関数を含むgoファイル)を見つけられないことです。

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

次に実行します:

$ go install 

-1

OSXモハーベ10.14で、goされる一般的に設置/usr/local/go

したがって、これらのENVをセットアップすれば、問題ありません。

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

また、これらをbash_profileまたはに追加してくださいzsh_profile

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

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