GOBIN이 설정되지 않았습니다. go install을 실행할 수 없습니다.


86

내 main.go 파일에 대한 사용자 지정 패키지를 설치하려고합니다. 그러나 내가 달렸을 때

go install custom.go

이 오류가 발생했습니다

go install: no install location for .go files listed on command line (GOBIN not set)

GOBIN은 어떻게 설정하나요?


16
BTW : 이것은 패키지를 설치하는 완전히 잘못된 방법입니다. 이것은 작동하지 않습니다. 개별 파일이 아닌 패키지를go install 설치 합니다. golang.org/cmd/go를 모두 읽고 파일 설정 방법을 확인하세요.
Volker

고마워요!
user3918985

2
나는 당신이 go build를 찾고 있다고 생각합니다.
bunnybare

2
나는 그것이 완전히 틀렸다는 데 동의하지 않습니다. GOBIN이 설정되면 두 가지 고유 한 동작이 있습니다. go build <gofile.go>를 사용하면 실행 파일이 동일한 폴더에 생성됩니다. go install <gofile.go>를 사용하면 실행 파일이 GOBIN에 생성됩니다.
Erez A. Korn

2
FWIW-시작하기위한 기본 문서에서는 정확히이 작업을 수행 할 것을 권장합니다. golang.org/doc/install
Mike Buckbee

답변:


46

업데이트 2020 : 이동 1.11과 이후 이동 모듈의 도입 , GOPATH더 이상 프로젝트별로 필요하지 않고, 기본값은~/go 글로벌 도구는 / 당신이하고자 프로젝트 go get.

Go 1.16 (2020 년 1 분기)의 기본값 GOBINGOPATH[0]/bin .

그러나 지금은 모듈을 사용하는 모든 프로젝트의 경우 " go install: no install location ..." 와 같은 오류 메시지가 더 이상 표시되지 않습니다.


2014 년 원래 답변 :

GOPATH변수를 확인하십시오 .
다음 사항을 확인하십시오.

  • 당신의 출처는 아래에 있습니다 GOPATH/src
  • 당신은이 bin당신의 GOPATH 폴더 안에 폴더를.

참조 GOPATH 환경 변수 ( 'DIR'는 것입니다 GOPATH폴더) :

bin디렉토리는 컴파일 명령을 보유하고 있습니다.
각 명령은 소스 디렉토리의 이름이 지정되지만 전체 경로가 아닌 마지막 요소 만 지정됩니다. 즉, 소스가있는 명령 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 Build 보기

Go 경로는 Go 소스 코드를 포함하는 디렉토리 트리 목록입니다. 표준 Go 트리에서 찾을 수없는 가져 오기를 해결하기 위해 참조됩니다.

을 완료 한 경우 (아니오 )를 go build시도 할 수도 있습니다. 단일 파일이 아닌 패키지를 설치하려고합니다.go installcustom.go


이게 무슨 뜻이야? 나는 $ PATH를 에코했고 이것을 얻었다 : / Users / apple / bin : / usr / bin : / bin : / usr / sbin : / sbin : / usr / local / bin : / usr / local / git / bin : / usr / 지역 / 이동 / 빈 : / usr / 지방 / mysql을 / 빈
user3918985

76

나는 GOBIN 경로를 설정했고 그것은 나를 위해 일했습니다.

export GOBIN=[WorkspacePath]/bin

2
네, 이것은 정답입니다. 해당 GOPATH에 / bin을 만듭니다.
swdev

7
내보내기 경로 후에 오류가 발생했습니다. cannot install, GOBIN must be an absolute path(
lee

@lee ..또는 ~지정한 경로 를 사용 했습니까 ? 그 오류가 발생하여 /home/ben/bin/또는 같은 절대 경로로 전환했습니다 $HOME/bin/. 내 전체 명령은 (fishshell에서 v1.11로 이동) env GOBIN=$HOME/bin/ go install testfile.go입니다.
Benny Jobigan

40

초보자로서 다양한 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 문서 도 참조하십시오 .


1
이것은 실제 솔루션 IMO입니다. go install디렉토리에서 작동하며 특정 go 파일을 지정하면이 특정 문제가 발생할 수 있습니다.
senseiwu

13

실제로 두 가지 종류의 행동이 있습니다.

go install <package>

이것은 컴파일 및 패키지 및 종속성 설치에 문서화되어 있습니다. GOPATH를 올바르게 설정하면 GOBIN이 필요하지 않습니다.

go install <gofile>

이것은 문서화되지 않았으며이 모드에서는 GOBIN 환경 변수가 필요합니다.


1
go install <gofile>에서, 문서화 go help packages되는 go install --help지칭한다. 문제는 go install(1.9.2 및 이전 버전에서) 일관되지 않은 동작이 있다는 것입니다. 한 경우에는 필요하고 다른 경우에는 명시 적으로 설정하는 데 GOBIN이 필요하지 않습니다.
Stevo Slavić

7

이전 답변에서 지적했듯이 GOPATH 환경이 작업 공간에 올바르게 설정되어 있으면 GOBIN 환경 변수를 설정할 필요가 없습니다.

$ go env |를 실행하여 go 환경 변수를 확인하십시오. grep -i "^ GO"를 선택하고 GOROOT 및 GOPATH를 찾아 GOROOT가 GO 소스 설치를 가리키고 GOPATH가 작업 공간을 가리키고 있는지 확인합니다.

모든 것이 올 바르면 yourpkg.go가있는 하위 디렉토리로 이동 한 다음 먼저 $ go build (파일 이름없이)를 실행하고 $ go install (다시 파일 이름으로) second를 실행합니다. 화면에 오류 메시지가 표시되지 않으면 패키지는 작업 공간 /pkg/youros/../yourpackage.a에서 준비되었습니다.


7

cygwin이있는 Windows에서는 GOBIN을 $ GOPATH / bin으로 설정하는 것이 좋습니다.

Windows 파일 이름 구분 기호를 올바르게 이스케이프해야합니다.

$ echo $GOROOT
C:\Go\

carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode

carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin

5

들어 *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

추신 : 마 소스에 잊지 ~/.bash_profile또는 ~/.zshrc다음과 같이 :

$ source ~/.bash_profile

4
정말로 개발 실행 파일을 드롭 /usr/local/go/bin하시겠습니까?
Dolph

1

설정에 관해서는 GOBIN그것을 필요로하는 단지에 의존하지 변수 버전 GOPATH:

  1. GOBIN패키지가없는 경우 필요합니다. 즉, 파일이 GOPATH디렉토리에 직접 있습니다 . 학습자로서 Go 기능을 사용해 볼 때입니다.

  2. 일반적인 Go 프로젝트의 경우 파일은 패키지 디렉터리 아래에 있습니다. 이것으로 GOPATH충분합니다.

  3. 즉, 다음 두 솔루션이 모두 작동합니다. GOBIN$ GOPATH / bin으로 명시 적으로 설정 [학습용으로 만 사용, 피할 수 있음] b. 패키지 이름이 될 하위 디렉토리를 만들고 .go 파일을 여기로 이동하십시오.

  4. Go 유틸리티는 인수가 디렉토리인지 소스 파일인지에 따라 위의 오류를 제거하고 시나리오를 더 잘 처리해야한다고 생각합니다.


1

대한 WINDOWS의 사용자

명령 프롬프트 ( Win+ r입력 후 입력 cmd) 또는 powershell 창 ( Win+ x입력 후 입력 i)을 엽니 다 .

GOPATH 설정

참고 : Go 설치와 동일한 경로 GOPATH 가 아니어야 합니다.

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


1

Windows에서 :

go env -w GOBIN=C:\Users\yourname\go\bin

로 확인 go envGOBIN이 설정되어 있는지 명령 후 go install제대로 bin 디렉토리에 제대로 실행 파일을 저장 명령.


1

나도 같은 문제가 있었는데 (고빈은 따로 설정하지 않아도 됨) 다음 사항이 있는지 확인하십시오.

  1. GOPATH가 설정 됨 (이것은 GOBIN을 $ GOPATH / bin으로 자동 설정 함)
  2. GOPATH에는 bin, pkg, src 디렉토리가 있습니다.
  3. custom.go는 src / <your_module> 아래에 있습니다.
  4. 그런 다음 실행 go install <your_module>
  5. bin 폴더 아래에서 컴파일 된 바이너리 (<your_module>)에 대한 검사를 찾을 수 있습니다.

0

$ GOPATH를 올바르게 설정했다면 $ GOBIN 이 필요하지 않습니다 . 그렇다면 프로젝트가 $ GOPATH / src 폴더 에 있는지 다시 확인하십시오 .


0

에서 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에 있음) 및 설치된 명령 (GOBIN이 설정되지 않은 경우 GOPATH / bin에 있음)을 계속 저장합니다.

따라서 기본적으로 GOBIN을 사용하여 기본 바이너리 설치 위치 (예 :)를 일시적 또는 영구적으로 재정의 할 수 있습니다 $GOPATH/bin. .NET을 사용하여 1 개의 파일 go "스크립트"를 성공적으로 설치했습니다 env GOBIN=$HOME/bin/ go install testfile.go. 이것은 go v1.11을 사용하여 수행되었습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.