在1.7中解决供应商的“无法找到包”错误(Resolving 'cannot find package' error with vendor in go 1.7)

编程入门 行业动态 更新时间:2024-10-15 10:16:05
在1.7中解决供应商的“无法找到包”错误(Resolving 'cannot find package' error with vendor in go 1.7)

我的项目结构如下所示: -

session-service _libs //Contains all the external dependencies api constants exceptions idgen jsonDecoder log model monitor persistence redis routes src/bddtest/servicetest util

_libs内容如下所示: -

github.com golang.org x net gopkg.in

我的Makefile如下所示: -

.PHONY: deploy LOGLEVEL ?= 1 CONFIGFILE ?= 2 GOFLAGS ?= $(GOFLAGS:) PWD = $(shell pwd) export GOPATH = $(shell echo $$GOPATH):$(PWD)/_libs:$(PWD) export GOBIN = $(PWD)/bin export GOROOT = $(shell echo $$GOROOT) deploy: clean build install build: @rm -rf pkg/ 2>/dev/null @rm -rf _libs/pkg/ 2>/dev/null @go build $(GOFLAGS) ./... install: @go install ./... clean: @go clean $(GOFLAGS) -i ./... ## EOF

一切都很好。 现在我想搬到vendor那里。 所以我将我的_libs重命名为vendor并修改了我的Makefile如下所示: -

export GOPATH = $(shell echo $$GOPATH):$(PWD)

但在此之后我开始收到以下错误: -

vendor/golang.org/x/net/html/charset/charset.go:20:2: cannot find package "golang.org/x/text/encoding" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding (vendor tree) /usr/local/go/src/golang.org/x/text/encoding (from $GOROOT) /Users/debraj/golang/src/golang.org/x/text/encoding (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding vendor/golang.org/x/net/html/charset/charset.go:21:2: cannot find package "golang.org/x/text/encoding/charmap" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding/charmap (vendor tree) /usr/local/go/src/golang.org/x/text/encoding/charmap (from $GOROOT) /Users/debraj/golang/src/golang.org/x/text/encoding/charmap (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding/charmap vendor/golang.org/x/net/html/charset/charset.go:22:2: cannot find package "golang.org/x/text/encoding/htmlindex" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding/htmlindex (vendor tree) /usr/local/go/src/golang.org/x/text/encoding/htmlindex (from $GOROOT) /Users/debraj/golang/src/golang.org/x/text/encoding/htmlindex (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding/htmlindex vendor/golang.org/x/net/html/charset/charset.go:23:2: cannot find package "golang.org/x/text/transform" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/transform (vendor tree) /usr/local/go/src/golang.org/x/text/transform (from $GOROOT) /Users/debraj/golang/src/golang.org/x/text/transform (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/transform vendor/golang.org/x/net/http2/h2i/h2i.go:38:2: cannot find package "golang.org/x/crypto/ssh/terminal" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/crypto/ssh/terminal (vendor tree) /usr/local/go/src/golang.org/x/crypto/ssh/terminal (from $GOROOT) /Users/debraj/golang/src/golang.org/x/crypto/ssh/terminal (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/crypto/ssh/terminal

环境:-

去版本go1.7.3 darwin / amd64 Mac OS X 10.11.6

有人能告诉我为什么我会收到vendor的上述错误但是_libs一切正常吗?

UPDATE

在我的本地, $(go list ./... | grep -v /vendor/)的输出中的换行引起了一些问题。 所以为了解决这个问题,我不得不jimb修改jimb的解决方案。 我在Makefile引入了一个变量PKG = $(shell go list ./... | grep -v /vendor/ | tr "\n" " ") @go build $(GOFLAGS) $(PKG) PKG = $(shell go list ./... | grep -v /vendor/ | tr "\n" " ")然后在go install & go build使用该变量,如@go build $(GOFLAGS) $(PKG)

I have a project structure which looks like below:-

session-service _libs //Contains all the external dependencies api constants exceptions idgen jsonDecoder log model monitor persistence redis routes src/bddtest/servicetest util

Content of _libs looks like below:-

github.com golang.org x net gopkg.in

My Makefile looks like below:-

.PHONY: deploy LOGLEVEL ?= 1 CONFIGFILE ?= 2 GOFLAGS ?= $(GOFLAGS:) PWD = $(shell pwd) export GOPATH = $(shell echo $$GOPATH):$(PWD)/_libs:$(PWD) export GOBIN = $(PWD)/bin export GOROOT = $(shell echo $$GOROOT) deploy: clean build install build: @rm -rf pkg/ 2>/dev/null @rm -rf _libs/pkg/ 2>/dev/null @go build $(GOFLAGS) ./... install: @go install ./... clean: @go clean $(GOFLAGS) -i ./... ## EOF

Everything is working fine. Now I am thinking of moving to vendor. So I renamed my _libs to vendor and modified my Makefile like below:-

export GOPATH = $(shell echo $$GOPATH):$(PWD)

But after this I started getting the following error:-

vendor/golang.org/x/net/html/charset/charset.go:20:2: cannot find package "golang.org/x/text/encoding" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding (vendor tree) /usr/local/go/src/golang.org/x/text/encoding (from $GOROOT) /Users/debraj/golang/src/golang.org/x/text/encoding (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding vendor/golang.org/x/net/html/charset/charset.go:21:2: cannot find package "golang.org/x/text/encoding/charmap" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding/charmap (vendor tree) /usr/local/go/src/golang.org/x/text/encoding/charmap (from $GOROOT) /Users/debraj/golang/src/golang.org/x/text/encoding/charmap (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding/charmap vendor/golang.org/x/net/html/charset/charset.go:22:2: cannot find package "golang.org/x/text/encoding/htmlindex" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/encoding/htmlindex (vendor tree) /usr/local/go/src/golang.org/x/text/encoding/htmlindex (from $GOROOT) /Users/debraj/golang/src/golang.org/x/text/encoding/htmlindex (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/encoding/htmlindex vendor/golang.org/x/net/html/charset/charset.go:23:2: cannot find package "golang.org/x/text/transform" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/text/transform (vendor tree) /usr/local/go/src/golang.org/x/text/transform (from $GOROOT) /Users/debraj/golang/src/golang.org/x/text/transform (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/text/transform vendor/golang.org/x/net/http2/h2i/h2i.go:38:2: cannot find package "golang.org/x/crypto/ssh/terminal" in any of: /Users/debraj/golang/src/b/m/session-service/vendor/golang.org/x/crypto/ssh/terminal (vendor tree) /usr/local/go/src/golang.org/x/crypto/ssh/terminal (from $GOROOT) /Users/debraj/golang/src/golang.org/x/crypto/ssh/terminal (from $GOPATH) /Users/debraj/golang/src/b/m/session-service/src/golang.org/x/crypto/ssh/terminal

Environment:-

go version go1.7.3 darwin/amd64 Mac OS X 10.11.6

Can someone let me know why I am getting the above errors with vendor but everything works fine with _libs?

UPDATE

In my local the newlines in the output of $(go list ./... | grep -v /vendor/) was causing some problem. So to resolve this I had to modify the jimb 's solution a bit. I introduced a variable in Makefile PKG = $(shell go list ./... | grep -v /vendor/ | tr "\n" " ") and then used that variable in go install & go build like @go build $(GOFLAGS) $(PKG)

最满意答案

_libs目录以_开头,并被go工具忽略。 将包移动到vendor/ , ./...通配符现在包含供应商目录中的所有包。

您应该明确列出要安装的软件包,而不是依赖./ ./...通配符。 如果您仍然需要通配符行为,则可以使用go list ./...并过滤其路径中包含vendor/目录的任何包。 根据您的具体需求,这可能很简单:

go install $(go list ./... | grep -v vendor/)

The _libs directory starts with _, and is ignored by the go tool. When you move the packages to vendor/, the ./... wildcard now includes all packages in the vendor directory.

You should explicitly list the package you want to install, rather than rely on the ./... wildcard. If you still want the wildcard behavior, you can use go list ./... and filter any package containing a vendor/ directory in their path. Depending on your specific needs, this could be as simple as:

go install $(go list ./... | grep -v vendor/)

更多推荐

本文发布于:2023-08-02 22:56:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1381903.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   供应商   Resolving   error   vendor

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!