การติดตั้งล้มเหลวโดยมีข้อผิดพลาด: ไม่มีตำแหน่งการติดตั้งสำหรับไดเรกทอรี xxx นอก GOPATH


152
~/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 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 และไปถูกติดตั้งด้วย homebrew

คำตอบ:


116

เมื่อคุณไม่ได้ระบุอาร์กิวเมนต์จะ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ถ้าเป็นที่ที่คุณถือซอร์สโค้ด)


5
ในกรณีของฉันข้อผิดพลาดนี้เกิดจากไม่มี$GOPATH/binไดเรกทอรี การสร้างโฟลเดอร์นี้เป็นสิ่งที่จำเป็น - ฉันไม่จำเป็นต้องตั้งค่าGOBINenv var
xentek

4
@RobertReiz ในขณะที่ฉันแบ่งปันความคับข้องใจของคุณฉันควรชี้ให้เห็นว่าภาษาอื่น ๆ ส่วนใหญ่ใช้ภาษาเหล่านี้ในความเป็นจริง แต่บางทีพวกเขาอาจไม่สามารถมองเห็นได้ ยกตัวอย่างเช่นงูหลาม (ภาษาที่มีชื่อเสียงสำหรับความเรียบง่ายของมัน) มีPYTHONHOMEแทนGOROOTและแทนPYTHONPATH GOPATHแม้ (GC) C มีLIBRARY_PATH, C_INCLUDE_PATHฯลฯ
Hut8

1
ฉันได้รับข้อผิดพลาดนี้หลังจากexport GOPATH=$PWD(ยืนที่รากของต้น Golang clone) คำตอบของคุณอาจไม่สามารถอธิบายข้อผิดพลาดได้ในกรณีนี้
ulidtko

2
สำหรับฉันการวางไว้ที่ $ GOPATH นั้นไม่เพียงพอ จำเป็นต้องอยู่ในไดเรกทอรีภายใต้ $ GOPATH / src /
Thomas

9
ฉันแน่ใจว่ามีเหตุผลที่ดีมากที่แสดงให้เห็นถึงการดำรงอยู่ของGOPATHแต่จากภายนอกดูในนี้ดูเหมือนจะไม่สนใจอย่างสมบูรณ์ ทำไมฉันต้องกลายพันธุ์ตัวแปรสภาพแวดล้อมของโลกเพียงเพื่อสร้างแพคเกจในประเทศ🤔
อเล็กซานเด - คืนสิทธิ์ให้กับโมนิกา

193

สำหรับผู้ใช้ OS X และอนาคตฉันคุณต้องตั้งค่าGOBINเพื่อหลีกเลี่ยงข้อความที่สับสนในการติดตั้งและgo get

mkdir bin 
export GOBIN=$GOPATH/bin

4
คุณไม่ควรจะต้องมีการตั้งค่า GOBINหากตั้งค่าเพื่อ$GOPATH/binสร้างความแตกต่างแสดงว่ามีสิ่งผิดปกติเกิดขึ้นกับการตั้งค่าของคุณ
เดฟ C

29
@DaveC ฉันมีปัญหาเดียวกันกับ OS X การตั้งค่า GOBIN แก้ไข
nJoshi

2
ขอบคุณมากดูเหมือนว่าบางสิ่งบางอย่างกับแพคเกจ OS X อย่างเป็นทางการนั้นผิดต้องให้คุณตั้ง GOBIN ซึ่งยังคงใช้ได้สำหรับ 10.11.4 (El Capitan)
Jonas D.

3
นี่คือการแก้ไขที่ถูกต้องสำหรับ Ubuntu 16.04 เช่นกันด้วยแพ็คเกจไบนารีจากhttp://golang.org/dl/
suside

1
สิ่งนี้ทำงานได้อย่างสมบูรณ์บน maOS Sierra 10.12.3 ขอบคุณ!
เกร็กฮิลสตัน

30

คุณใช้go ติดตั้งในไดเรกทอรีนอกโฟลเดอร์ GOPATH ตั้งค่าตัวแปร GOBIN env หรือย้ายโฟลเดอร์srcภายใน GOPATH

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

ข้อมูลเพิ่มเติม: GO BUILD ซอร์สโค้ดบรรทัด 296


ฉันลองคำแนะนำข้างต้น (ส่งออก GOPATH = $ HOME) จากนั้นย้ายไปยังไดเรกทอรีที่เกี่ยวข้องของฉัน (ที่ฉันเขียนรหัสของฉัน) และพิมพ์ไปติดตั้ง ... ผลเดียวกันไปติดตั้ง: ไม่มีตำแหน่งติดตั้งสำหรับไดเรกทอรี ....
stian

บรรทัด 296 เป็นเพียงข้อความสั่งการส่งคืนหรือไม่
Felix Rabe

1
ฉันลืมตั้ง GOBIN env
cevaris

ฉันไปหาทางออกนี้
Mihamina Rakotomandimby

19

คุณจำเป็นต้องติดตั้งทั้งในและGOPATH GOBINตรวจสอบให้แน่ใจว่าคุณได้ทำสิ่งต่อไปนี้แล้ว (โปรดแทนที่~/goด้วยสิ่งที่คุณต้องการGOPATHแล้วเปลี่ยนในภายหลังGOBIN) Ubuntu 16.04 LTSนี้มีการทดสอบใน

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

คำตอบที่เลือกไม่ได้แก้ปัญหาสำหรับฉัน


ฉันมีทั้งคำจำกัดความใน 16.04 และสิ่งนี้ไม่ได้ผลสำหรับฉัน
Catskul

5

คุณจะต้องมี 3 ไดเรกทอรีในไดเรกทอรี GOPATH ที่คุณเลือก

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

จากนั้นคุณจะเรียกใช้งานgo installจาก someProgram (ซึ่งทำให้สามารถเรียกทำงานได้ในถังขยะ) หรือ someLibrary (ซึ่งทำให้ไลบรารีเป็น pkg)


1
สิ่งนี้ใช้ได้สำหรับฉันหลังจากค้นหาบนอินเทอร์เน็ต 2 ชั่วโมง
vishalknishad

3

ฉันมีปัญหานี้ใน Windows

ปัญหาของฉัน%GOPATH%คือตัวแปรสภาพแวดล้อมของฉันถูกตั้งค่าเป็น

C:\Users\john\src\goworkspace

แทน

C:\Users\john\src\goworkspace\

การเพิ่มเครื่องหมายสแลชต่อท้ายที่ขาดหายไปในตอนท้ายแก้ไขให้ฉัน


1
วัวศักดิ์สิทธิ์ที่คุณเพิ่งช่วยฉันจากอาการปวดหัวที่อาจเกิดขึ้นหลายชั่วโมง ฉันใช้งาน Ubuntu แต่มีปัญหาเดียวกัน ขยันอย่างยิ่งเกี่ยวกับชื่อโฟลเดอร์โครงสร้างโฟลเดอร์การวางหน้าล่วงหน้าด้วย src / github.com / xyabz / และทุกอย่าง แต่การติดตั้งไปเรื่อย ๆ ทำให้ฉันมีข้อผิดพลาด
anon58192932

3

สำหรับสิ่งที่คุ้มค่านี่คือ. bash_profile ของฉันซึ่งทำงานได้ดีสำหรับฉันบน mac ที่มี Atom หลังจากติดตั้งใช้งานกับ Homebrew:

export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

2

ในกรณีของฉัน (OS X) มันเป็นเพราะฉันได้ตั้งค่าGOPATHเป็น/home/username/go(ตามหนังสือ) แทนที่จะเป็น/Users/username/go


2

ฉันอยู่บน Windows และฉันได้รับโดยให้คำสั่งgo help gopathกับ cmd และอ่านข้อความที่เป็นตัวหนาในคำสั่ง

ว่าถ้าคุณต้องการซิรหัสในการติดตั้งเป็นที่..BaseDir...\SomeProject\src\basic\setที่GOPATHไม่ควรเป็นสถานที่เดียวกับรหัสที่มันควรจะเป็นเพียงแค่โครงการฐาน ..BaseDir...\SomeProjectDIR:

ตัวแปรสภาพแวดล้อม GOPATH แสดงรายการสถานที่ที่จะค้นหารหัส Go บน Unix ค่าจะเป็นสตริงที่คั่นด้วยโคลอน บน Windows ค่าคือสตริงที่คั่นด้วยเครื่องหมายอัฒภาค บนแผน 9 ค่าเป็นรายการ

หากตัวแปรสภาพแวดล้อมไม่ได้รับการตั้งค่า GOPATH จะใช้ค่าเริ่มต้นเป็นไดเรกทอรีย่อยชื่อ "go" ในโฮมไดเรกทอรีของผู้ใช้ ($ HOME / go บน Unix,% USERPROFILE% \ go บน 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 ได้รับการตั้งฐานโครงการ DIR และยังคงมีปัญหานี้ใน Windows คุณสามารถพยายามที่จะตั้งGobinเป็น หรือBase Project DIR\bin%GOPATH%\bin


1

ระวังเมื่อทำงาน

export GOPATH=$HOME

GOPATHไปคิดว่ารหัสของคุณอยู่ในสถานที่เฉพาะที่เกี่ยวข้องกับ ดังนั้นคุณสามารถใช้นักเทียบท่าเพื่อรันคำสั่ง go ใดก็ได้:

docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang

และตอนนี้คุณสามารถใช้คำสั่ง golang ตัวอย่างเช่น:

go test github.com/<organization name>/<repository name> 

0

ใน windows หน้าต่าง cmd ของฉันเปิดขึ้นแล้วเมื่อฉันตั้งค่าตัวแปรสภาพแวดล้อม GOPATH ก่อนอื่นฉันต้องปิด cmd และเปิดใหม่อีกครั้งเพื่อให้มีประสิทธิภาพ


0

ปัญหาคือคุณไม่ได้อยู่ในไดเรกทอรีแพ็คเกจที่มีไฟล์ go พร้อมกับฟังก์ชั่น go หลักและติดตั้ง go ไม่สามารถหาคำสั่ง (go file ด้วยฟังก์ชันหลัก go) ที่คุณต้องการติดตั้ง

$ cd /path/to/file-with-main-function.go

จากนั้นเรียกใช้:

$ go install 

-1

ใน OSX ซ้อม 10.14, goเป็นมักจะ/usr/local/goติดตั้งอยู่ที่

ดังนั้นการตั้งค่า ENV เหล่านี้และคุณควรจะไปได้ดี

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

นอกจากนี้ให้เพิ่มสิ่งเหล่านี้ในของคุณbash_profileหรือzsh_profileถ้ามันใช้งานได้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.