【问题标题】:Go install fails with error: no install location for directory xxx outside GOPATHGo 安装失败并出现错误:在 GOPATH 之外没有目录 xxx 的安装位置
【发布时间】:2013-08-09 14:52:32
【问题描述】:
~/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 build 完美运行。

这是我的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 安装的。

【问题讨论】:

    标签: macos go


    【解决方案1】:

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

    mkdir bin 
    export GOBIN=$GOPATH/bin
    

    【讨论】:

    • 您不需要set GOBIN。如果将其设置为 $GOPATH/bin 会有所不同,则说明您的设置有其他问题,或者您正在做不应该做的事情。
    • @DaveC 我在 OS X 上也有同样的问题。设置 GOBIN 解决了​​它。
    • 非常感谢,看起来官方 OS X 包的某些内容确实有问题,确实需要您设置 GOBIN,对于 10.11.4 (El Capitan) 仍然有效
    • 这也是 Ubuntu 16.04 的正确修复,二进制包来自 http://golang.org/dl/
    • 这在 maOS Sierra 10.12.3 上完美运行,谢谢!
    【解决方案2】:

    当您不向go install 提供任何参数时,它默认尝试将包安装在当前目录中。错误消息告诉您它不能这样做,因为当前目录不是您的$GOPATH 的一部分。

    您可以:

    • $GOPATH 定义为您的$HOME (export GOPATH=$HOME)。
    • 将您的源移动到当前$GOPATH (mv ~/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,如果这是您保存源代码的位置)。

    【讨论】:

    • 在我的情况下,此错误是由于没有$GOPATH/bin 目录引起的。需要创建这个文件夹——我不需要设置GOBIN env var。
    • @RobertReiz 虽然我与您一样感到沮丧,但我应该指出大多数其他语言实际上都使用这些,但也许它们不那么明显。例如,Python(一种以其简单而闻名的语言)有PYTHONHOME 而不是GOROOTPYTHONPATH 而不是GOPATH。甚至 (GC)C 也有LIBRARY_PATHC_INCLUDE_PATH 等。
    • 对我来说,把它放在 $GOPATH 是不够的。它需要位于 $GOPATH/src/ 下的目录中
    • 我确信有一些很好的理由来证明GOPATH 的存在是正确的,但从外面看,这似乎完全是愚蠢的。为什么我必须改变全局环境变量才能在本地构建一个包?
    • 我不明白。我有一个检查代码的位置,比如~/work。还必须在那里存储依赖的源文件不是很奇怪吗?为什么我不能在这里工作并在~/go 中检索依赖项?
    【解决方案3】:

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

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

    更多信息:GO BUILD Source code,第 296 行

    【讨论】:

    • 我尝试了上面的建议(导出 GOPATH=$HOME),然后进入我的相关目录(我正在编写代码的地方)并输入 go install ...same result go install: no install location对于目录 ....
    • 第296行只是一个return语句?
    • 我忘了设置我的 GOBIN 环境
    • 我选择了这个解决方案。
    【解决方案4】:

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

    export GOPATH=~/go 
    
    mkdir ~/go/bin
    
    export GOBIN=$GOPATH/bin
    

    所选答案没有为我解决问题。

    【讨论】:

    • 我都在 16.04 中定义了,但这对我不起作用。
    【解决方案5】:

    您需要在您选择的 GOPATH 目录中有 3 个目录。

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

    然后您将在 someProgram(将可执行文件放入 bin)或 someLibrary(将库放入 pkg)中运行 go install

    【讨论】:

    • 在互联网上搜索 2 小时后,这对我有用。
    【解决方案6】:

    我在 Windows 上遇到了这个问题。

    我的问题是我的%GOPATH% 环境变量设置为

    C:\Users\john\src\goworkspace

    而不是

    C:\Users\john\src\goworkspace\

    在末尾添加缺少的斜杠为我修复了它。

    【讨论】:

    • 天哪,你刚刚把我从可能持续数小时的头痛中解救了出来。我在 Ubuntu 上,但遇到了同样的问题。对文件夹名称、文件夹结构、以 src/github.com/xyabz/ 开头以及除 go install 之外的所有内容都非常勤奋,总是给我错误。
    【解决方案7】:

    对于它的价值,这是我的 .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
    

    【讨论】:

      【解决方案8】:

      在我的情况下(OS X),这是因为我将GOPATH 设置为/home/username/go(根据本书)而不是/Users/username/go

      【讨论】:

        【解决方案9】:

        我在 Windows 上,通过向 cmd 发出命令go help gopath 得到它,并阅读指令中的粗体文本,

        也就是说,如果您要安装的代码位于 ..BaseDir...\SomeProject\src\basic\set,则 GOPATH 不应与代码位于同一位置,它应该只是 Base Project DIR:..BaseDir...\SomeProject

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

        如果未设置环境变量,GOPATH 默认为 用户主目录中名为“go”的子目录($HOME/go on Unix, %USERPROFILE%\go on Windows),除非该目录包含 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 已设置为 Base Project DIR 并且仍然存在此问题,则可以在 windows 中尝试将 GOBIN 设置为 Base Project DIR\bin%GOPATH%\bin

        【讨论】:

          【解决方案10】:

          跑步时要小心

          export GOPATH=$HOME
          

          Go 假设您的代码存在于与 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> 
          

          【讨论】:

            【解决方案11】:

            在 windows 中,当我设置 GOPATH 环境变量时,我的 cmd 窗口已经打开。 首先我必须关闭 cmd 然后重新打开它才能生效。

            【讨论】:

              【解决方案12】:

              在 OSX Mojave 10.14 上,go通常安装在 /usr/local/go

              因此,设置这些 ENV,您应该一切顺利。

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

              此外,如果可行,请将这些添加到您的 bash_profilezsh_profile

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

              【讨论】:

                猜你喜欢
                • 2014-11-25
                • 1970-01-01
                • 2021-07-31
                • 2017-08-28
                • 1970-01-01
                • 2021-11-08
                • 1970-01-01
                • 2016-11-08
                • 1970-01-01
                相关资源
                最近更新 更多