2017-01-11 12 views
1

에서 공급 업체와 오류 '패키지를 찾을 수 없습니다'해결은 내가 좋아 아래 보이는 프로젝트 구조를 가지고 이동 1.7

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으로 이동할 생각입니다. 그래서 vendor_libs 내 이름이 바뀐 수정 내 Makefile 다음과 같은 : - :

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 

환경 : - -

  • 가고
    export GOPATH = $(shell echo $$GOPATH):$(PWD) 
    

    그러나 나는 다음과 같은 오류를 받기 시작이 후

    버전 go1.7.3 darwin/amd64
  • Mac OS X 10.11.6

누구나 내가 왜 vendor으로 위의 오류가 발생하는지 알 수 있습니까? 그러나 모든 것이 _libs과 함께 잘 작동합니까?

UPDATE $(go list ./... | grep -v /vendor/)의 출력에서 ​​뉴 라인 내 로컬에서

몇 가지 문제가 발생했다. 그래서 이것을 해결하기 위해 나는 jimb의 해결책을 조금 수정해야했습니다. 나는 MakefilePKG = $(shell go list ./... | grep -v /vendor/ | tr "\n" " ")에서 변수를 도입하고 _libs 디렉토리 _로 시작하고 go 도구에 의해 무시됩니다 @go build $(GOFLAGS) $(PKG)

+0

종속성을 모두 가지고 있지 않지만 전에 빌드하지 않은 패키지가'vendor /'에 있다고 생각합니다. './...'을 사용하지 말고, 빌드하고자하는 패키지 만 설치하십시오. – JimB

+0

그러나'_lib'에서 모든 의존성을 가지고 있었을 때 모든 것이 잘 작동했습니다. 또한'go install./...'을 사용해서는 안된다는 말입니까? – tuk

+2

'_lib' 접두어 앞에 밑줄을 붙인 이유는 이동 도구에 의해 무시되도록하기 위해서입니다. (이전에 그런 행운이 없었 으면) 이전에 작동했던 이유입니다. 아니요,이 경우에는'go install./... '을 사용하면 안됩니다. 빌드하려는 특정 기본 패키지 만 설치하십시오. – JimB

답변

3

처럼 go install & go build에 해당 변수를 사용했다. 패키지를 vendor/으로 이동하면 ./... 와일드 카드에 이제 모든 패키지가 공급 업체 디렉토리에 포함됩니다.

./... 와일드 카드를 사용하는 대신 설치하려는 패키지를 명시 적으로 나열해야합니다. 와일드 카드 동작을 계속 사용하려는 경우 go list ./...을 사용하고 해당 경로에 vendor/ 디렉토리가 포함 된 패키지를 필터링 할 수 있습니다. 사용자의 특정 요구에 따라 다음과 같이 간단 할 수 있습니다.

관련 문제