我正在尝试为main.go文件安装自定义软件包。可是我跑的时候
go install custom.go
我得到这个错误
go install: no install location for .go files listed on command line (GOBIN not set)
如何设置GOBIN?
我正在尝试为main.go文件安装自定义软件包。可是我跑的时候
go install custom.go
我得到这个错误
go install: no install location for .go files listed on command line (GOBIN not set)
如何设置GOBIN?
Answers:
更新2020:自走1.11和引进围棋模块,GOPATH
不需要每个项目了,并默认为~/go
全球工具/项目你会go get
。
Go 1.16(2020年第一季度)应默认GOBIN
为 GOPATH[0]/bin
。
但是就目前而言,对于任何使用模块的项目,您都不会再收到类似“ go install: no install location ...
”的错误消息。
2014年原始答案:
检查您的GOPATH
变量。
确保:
- 您的资料来源
GOPATH/src
bin
在GOPATH文件夹中有一个文件夹。请参阅GOPATH环境变量(其中“ DIR”是GOPATH
文件夹):
该
bin
目录包含已编译的命令。
每个命令都以其源目录命名,但仅命名为最后一个元素,而不是整个路径。也就是说,将source in的命令DIR/src/foo/quux
安装到DIR/bin/quux
而不是中DIR/bin/foo/quux
。在“foo/
”前缀被剥离,以便您可以添加DIR/bin
到您PATH
得到在安装命令。
如果
GOBIN
设置了环境变量,那么命令将安装到它命名的目录中,而不是安装在DIR/bin
。GOBIN
必须是绝对路径。
例如,该线程说明了在以下位置进行go构建的情况GOPATH/src
:
看起来您
GOPATH
已设置为,~/go
但是您在go install
上运行了命令~/dev/go
请参阅构建
Go路径是包含Go源代码的目录树的列表。咨询它来解决在标准Go树中找不到的导入。
如果您已完成操作go build
,也可以尝试使用go install
(no custom.go
):您要安装软件包,而不是单个文件。
我设置了GOBIN路径,对我有用
export GOBIN=[WorkspacePath]/bin
cannot install, GOBIN must be an absolute path
:(
..
还是~
在指定的路径中?我遇到了这个错误,只是切换到诸如/home/ben/bin/
甚至的绝对路径$HOME/bin/
。我的完整命令是(在鱼壳中,转到v1.11)env GOBIN=$HOME/bin/ go install testfile.go
。
作为初学者,我在尝试各种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结尾),而go install 仅接受软件包。程序包通过其导入路径或文件系统路径来命名。从而:
nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .
一切都很好。第一个通过导入路径引用该软件包(假设$ GOPATH =“ / home / nate / work”,go工具在/ home / nate / work / src中查找源代码),其他被解释为文件系统。路径,因为提前期。
另请参阅GOPATH文档。
go install
适用于目录,如果您指定特定的go文件,则可能导致此特定问题。
实际上,有两种不同的行为。
go install <package>
这是在记录编译并安装软件包和依赖 你不需要GOBIN如果你正确设置GOPATH。
go install <gofile>
这没有记录,在这种模式下需要GOBIN env变量。
go install <gofile>
是记录,在go help packages
到其go install --help
指。问题是go install
(在1.9.2和更早版本中)具有不一致的行为,在一种情况下要求不一致,而在另一种情况下则不需要显式设置GOBIN。
如先前的回答所指出的,如果将GOPATH env正确设置为工作空间,则无需设置GOBIN env变量。
请通过运行$ go env检查您的go环境变量| grep -i“ ^ GO”并查找GOROOT和GOPATH以检查GOROOT是否指向您的GO源安装以及GOPATH是否指向您的工作区。
如果一切正确,请导航至yourpkg.go所在的子目录,然后首先运行$ go build(不带文件名),然后再运行$ go install(再次使用我们的文件名),如果您在屏幕上没有看到任何错误消息,软件包已在您的工作区/pkg/youros/../yourpackage.a中就绪
对于*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
/usr/local/go/bin
?
对于WINDOWS用户
打开命令提示符(Win
+r
然后键入cmd
)或Powershell窗口(Win
+x
然后键入i
)。
设置GOPATH
注意:
GOPATH
不得与Go安装路径相同。
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
我也遇到了同样的麻烦(无需单独设置GOBIN),请确保您具有以下内容
go install <your_module>
从https://golang.org/cmd/go/#hdr-Environment_variables:
GOBIN'go install'将在其中安装命令的目录。
和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中)和已安装的命令(在GOPATH / bin中,除非设置了GOBIN)。
因此,似乎基本上可以使用GOBIN临时或永久覆盖默认的二进制安装位置(即$GOPATH/bin
)。我成功使用安装了1个文件的go“脚本” env GOBIN=$HOME/bin/ go install testfile.go
。这是使用go v1.11完成的。
go install
安装软件包而不是单个文件。请阅读golang.org/cmd/go的所有内容,并了解如何设置文件。