web-dev-qa-db-ja.com

Goインストールがエラーで失敗する:GOPATHの外部にあるディレクトリxxxのインストール場所がありません

~/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ビルドは完全に機能します。

これが私の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はhomebrewでインストールされました。

129
tgandrews

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)。

100

OS Xユーザーと将来の私にとっては、GOBINを設定して、インストール時のこの混乱を招くメッセージとgo getを避ける必要もあります。

mkdir bin 
export GOBIN=$GOPATH/bin
155

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

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

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

25

GOPATHGOBINの両方をセットアップする必要があります。次のことを確認してください(~/goをお好みのGOPATHに置き換えてから、GOBINを変更してください)。これはUbuntu 16.04 LTSでテストされます。

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

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

13
Zhenhua

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

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

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

5
Earl Zedd

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

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

C:\Users\john\src\goworkspace

の代わりに

C:\Users\john\src\goworkspace\

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

3
eckza

私の場合(OS X)は、GOPATH/home/username/goではなく/Users/username/goに設定しているためです(本のとおり)。

2
asdfasdfads

それが価値があるのは、Homebrewでgoをインストールした後、Atomを搭載したMacでうまく機能する私の.bash_profileです:

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

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

つまり、インストールするコードが..BaseDir...\SomeProject\src\basic\setにある場合、GOPATHはコードと同じ場所ではなく、単にBase Project 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を設定してください。

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 /」プレフィックスは削除され、DIR/binをPATHに追加して、インストールされたコマンドを取得できます。 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
yu yang Jian

OSX Mojave 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

0
A Null Pointer

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

0
lode

このスレッドや他の場所で定義されている修正方法はいくつかありますが、ほとんどの人が見落としているのは、現在の問題を修正するだけではなく、プロジェクト設計で意図したものから間違っている場合にも対処しようとしていますまたはプロジェクトの作成者が希望します。

まず、$ GOPATH変数を修正する必要があります。 Soln:プロジェクトのベースパスに設定します。次に、プロジェクトへのエントリポイントを定義する必要があります。通常、「main」を使用して定義されます。

これは、プロジェクトの実行がベース作業ディレクトリとプログラムの作業ポイントを理解する方法です。

0

実行中は注意してください

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

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

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

次に実行します:

$ go install 
0
Margach Chris