转到安装失败,并显示错误: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上,并且安装了自制软件。

Answers:


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目录引起的。需要创建此文件夹-我不需要设置GOBINenv var。
xentek

4
@RobertReiz在我分享您的挫败感的同时,我应该指出,实际上大多数其他语言都在使用这些语言,但也许它们不那么明显。例如,Python(一种以其简单性PYTHONHOME而闻名的语言)具有GOROOTPYTHONPATH而不是GOPATH。即使(GC)C有LIBRARY_PATHC_INCLUDE_PATH
Hut8

1
我收到此错误之后export GOPATH=$PWD(位于Golang克隆树的根),您的答案在这种情况下可能无法解释该错误。
ulidtko '16

2
对我来说,将其放在$ GOPATH中还不够。它必须位于$ GOPATH / src /下的目录中
Thomas

9
我敢肯定有充分的理由来证明的存在GOPATH,但是从外面看,这似乎完全是无稽之谈。为什么我必须突变全局环境变量才能在本地构建一个软件包package
Alexander-Reinstate Monica

190

对于任何OS X用户以及未来的我,您还需要进行设置GOBIN以避免在安装和安装时出现此令人困惑的消息。go get

mkdir bin 
export GOBIN=$GOPATH/bin

4
您不需要设置GOBIN。如果将其设置$GOPATH/bin为有所不同,则说明您的设置有其他问题,或者您不应该这样做。
Dave

28
@DaveC我在OS X上也有同样的问题。设置GOBIN可以解决它。
nJoshi

2
非常感谢,官方OS X软件包似乎有问题,确实需要您设置GOBIN,但仍适用于10.11.4(El Capitan)
Jonas D.

3
这也是对Ubuntu 16.04的正确修复,使用来自http://golang.org/dl/的
suside

1
这在maOS Sierra 10.12.3上完美运行。谢谢!
格雷格·希尔斯顿

30

您在GOPATH文件夹外的目录上使用go install。设置您的GOBIN env变量,或将src文件夹移动到GOPATH中。

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

更多信息:GO BUILD源代码,第296行


我尝试了上述建议(导出GOPATH = $ HOME),然后移至相关目录(我正在编写代码的位置)并输入go install ...相同的结果go install:目录没有安装位置....
stian

296行只是一个return语句?
Felix Rabe 2014年

1
我忘了设置GOBIN环境
cevaris,2014年

我去了这个解决方案。
Mihamina Rakotomandimby

19

您需要同时设置GOPATHGOBIN。确保您已完成以下操作(请替换~/go为您的首选设置GOPATH,然后进行更改GOBIN)。已在测试Ubuntu 16.04 LTS

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

选择的答案对我来说没有解决问题。


我都在16.04中定义了,这对我不起作用。
Catskul

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 '10 -10-7

3

对于它的价值,这是我的.bash_profile,它在与Homebrew一起安装后,在装有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 发出命令来获得它,并阅读说明中的粗体字,

也就是说,如果你wnat安装代码是..BaseDir...\SomeProject\src\basic\set,该GOPATH不应该是同一位置的代码,它应该只是基地项目DIR: ..BaseDir...\SomeProject

GOPATH环境变量列出了查找Go代码的位置。在Unix上,该值是用冒号分隔的字符串。在Windows上,该值为分号分隔的字符串。在计划9中,该值是一个列表。

如果未设置环境变量,则GOPATH默认为用户主目录(Unix上的$ HOME / go,Windows上的%USERPROFILE%\ go)中名为“ 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 / quux中,而不是DIR / bin / foo / 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已设置为“基础项目DIR”,但仍然存在此问题,则在Windows中,您可以尝试将GOBIN设置为 Base 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_profilezsh_profile如果可行。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.