Go इंस्टॉल त्रुटि के साथ विफल रहता है: GOPATH के बाहर निर्देशिका xxx के लिए कोई इंस्टॉल स्थान नहीं


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"

यह मैक ओएसएक्स माउंटेन लायन पर है और होमब्रे के साथ गो स्थापित किया गया था।

जवाबों:


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। यहां तक ​​कि (जीसी) सी में LIBRARY_PATHभी है C_INCLUDE_PATH, आदि
Hut8

1
मुझे यह त्रुटि export GOPATH=$PWD(गोलंग क्लोन पेड़ की जड़ पर खड़े होने के बाद ) मिलती है, आपका जवाब संभवतः इस मामले में त्रुटि की व्याख्या नहीं कर सकता।
ulidtko

2
मेरे लिए, इसे $ GOPATH में डालना पर्याप्त नहीं था। यह
थॉमस

9
मुझे यकीन है कि अस्तित्व के औचित्य के लिए कुछ बहुत अच्छे कारण हैं GOPATH, लेकिन बाहर से देखने में यह पूरी तरह से नासमझ लगता है। मुझे वैश्विक पर्यावरण चर को केवल स्थानीय रूप से एक पैकेज बनाने के लिए क्यों बदलना है
अलेक्जेंडर -

192

किसी भी ओएस एक्स उपयोगकर्ताओं और मुझे भविष्य के लिए, आपको GOBINइंस्टॉल और पर इस भ्रामक संदेश से बचने के लिए भी सेट करना होगाgo get

mkdir bin 
export GOBIN=$GOPATH/bin

4
आपको सेटGOBIN करने की आवश्यकता नहीं होनी चाहिए । यदि इसे बनाने $GOPATH/binसे फर्क पड़ता है, तो आपके सेटअप में कुछ और गलत है या आप ऐसा कुछ कर रहे हैं जो आपको नहीं करना चाहिए।
डेव सी।

29
@DaveC मुझे OS X पर भी यही समस्या है। GOBIN को सेट करना इसे ठीक करता है।
nJoshi

2
बहुत बहुत धन्यवाद, ऐसा लगता है कि आधिकारिक ओएस एक्स पैकेज के साथ कुछ गलत है वास्तव में आपको GOBIN सेट करने की आवश्यकता है, फिर भी 10.11.4 (एल कैपिटन) के लिए वैध है
जोनास डी।

3
यह उबंटू 16.04 के लिए सही फिक्स के साथ-साथ, द्विआधारी पैकेज के साथ से है http://golang.org/dl/
suside

1
यह पूरी तरह से maOS Sierra 10.12.3 पर काम किया धन्यवाद!
ग्रेग हिल्स्टन

30

आप GOPATH फ़ोल्डर के बाहर एक निर्देशिका पर जाने का उपयोग कर रहे हैं । अपना GOBIN env वेरिएबल सेट करें, या GOPATH के अंदर src फोल्डर को स्थानांतरित करें।

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

अधिक जानकारी: BUILD स्रोत कोड , लाइन 296 पर जाएं


मैंने ऊपर दिए गए सुझाव को आज़माया (निर्यात GOPATH = $ HOME), फिर अपनी प्रासंगिक निर्देशिका (जहाँ मैं अपना कोड लिख रहा हूँ) में स्थानांतरित हो गया और टाइप किया गया स्थापित हो गया ... वही परिणाम स्थापित हो गया: निर्देशिका के लिए कोई संस्थापित स्थान ....
stian

लाइन २ ९ ६ सिर्फ रिटर्न स्टेटमेंट है?
फेलिक्स राबे

1
मैं अपने Gobin env स्थापित करने के लिए भूल गया
cevaris

मैं इसके समाधान के लिए गया था।
मिहमीना रकोतोमन्दिम्बी

19

आप सेटअप दोनों की जरूरत है GOPATHऔर GOBIN। सुनिश्चित करें कि आपने निम्नलिखित कार्य किए हैं (कृपया ~/goअपने पसंदीदा GOPATHऔर बाद में परिवर्तन के साथ बदलें GOBIN)। इस पर परीक्षण किया जाता है Ubuntu 16.04 LTS

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

चयनित उत्तर ने मेरे लिए समस्या का समाधान नहीं किया।


मैंने दोनों को 16.04 में परिभाषित किया है और यह मेरे लिए काम नहीं करता है।
कैटस्कुल

5

आप अपनी चुनी हुई GOPATH निर्देशिका के अंदर 3 निर्देशिकाएँ रखना चाहेंगे।

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

फिर आप या go installतो someProgram (जो बिन में एक निष्पादन योग्य डालता है) या someLibrary (जो कि pkg में लाइब्रेरी डालता है) के अंदर से चलेंगे ।


1
इंटरनेट पर 2 घंटे की खोज के बाद इसने मेरे लिए काम किया।
०१23१

3

मुझे विंडोज पर यह समस्या थी।

मेरी समस्या यह थी कि मेरा %GOPATH%वातावरण परिवर्तनशील था

C:\Users\john\src\goworkspace

के बजाय

C:\Users\john\src\goworkspace\

अंत में लापता ट्रेलिंग स्लैश को जोड़ना मेरे लिए तय हो गया।


1
पवित्र गाय आपने मुझे एक संभावित बहु-घंटे सिरदर्द से बचाया। मैं उबंटू पर हूं लेकिन वही समस्या थी। फ़ोल्डर नाम, फ़ोल्डर संरचना, src / github.com / xyabz / और सब कुछ के साथ पूर्ववर्ती के बारे में बहुत मेहनती था, लेकिन मुझे त्रुटि दे रखा स्थापित जाओ।
Anon58192932

3

इसके लायक क्या है, यहाँ मेरा .bash_profile है, जो एटम के साथ मैक पर मेरे लिए अच्छा काम करता है, होमब्रे के साथ जाने के बाद:

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

2

मेरे मामले में (ओएस एक्स) ऐसा इसलिए था क्योंकि मैंने इसके बजाय (पुस्तक के अनुसार) सेट GOPATHकिया /home/username/goहै/Users/username/go


2

मैं विंडोज पर हूं, और मैंने इसे go help gopathcmd को कमांड देकर , और बोल्ड टेक्स्ट को निर्देश में पढ़ा,

यदि आप जिस कोड को इंस्टॉल करना चाहते हैं वह है ..BaseDir...\SomeProject\src\basic\set, GOPATH कोड के समान स्थान नहीं होना चाहिए, यह सिर्फ आधार प्रोजेक्ट DIR होना चाहिए ..BaseDir...\SomeProject:।

GOPATH पर्यावरण वैरिएबल गो कोड देखने के लिए स्थानों को सूचीबद्ध करता है। यूनिक्स पर, मूल्य एक बृहदान्त्र-पृथक स्ट्रिंग है। विंडोज पर, मान एक अर्धविराम से अलग स्ट्रिंग है। योजना 9 पर, मूल्य एक सूची है।

यदि पर्यावरण चर अप्रभावी है, तो GOPATH उपयोगकर्ता के होम डायरेक्टरी में "गो" ($ HOME / Unix,% USERPROFILE% \ go पर चलते हैं) नामक उपनिर्देशिका को तब तक डिफॉल्ट करता है, जब तक कि वह डायरेक्टरी गो डिस्ट्रीब्यूशन नहीं रखती। वर्तमान GOPATH को देखने के लिए "go env GOPATH" चलाएं।

Https://golang.org/wiki/SettingGOPATH देखेंकस्टम GOPATH सेट करने के लिए ।

GOPATH में सूचीबद्ध प्रत्येक निर्देशिका में एक निर्धारित संरचना होनी चाहिए:

Src निर्देशिका स्रोत कोड रखती है। Src के नीचे का पथ आयात पथ या निष्पादन योग्य नाम निर्धारित करता है।

Pkg निर्देशिका स्थापित पैकेज ऑब्जेक्ट रखती है। जैसे कि गो ट्री में, प्रत्येक टार्गेट ऑपरेटिंग सिस्टम और आर्किटेक्चर पेयर में pkg (pkg / GOOS_GOZCH) की अपनी उपनिर्देशिका होती है।

यदि DIR GOPATH में सूचीबद्ध एक निर्देशिका है, तो DIR / src / foo / bar में स्रोत वाला एक पैकेज "foo / bar" के रूप में आयात किया जा सकता है और इसका संकलित रूप "DIR / pkg / GOOS / GOARCH / foo / bar.a में स्थापित किया गया है "।

बिन निर्देशिका संकलित कमांड रखती है। प्रत्येक कमांड को उसके स्रोत निर्देशिका के लिए नामित किया गया है, लेकिन केवल अंतिम तत्व, संपूर्ण पथ नहीं। अर्थात्, DIR / src / foo / quux में स्रोत के साथ कमांड DIR / bin / quux में स्थापित है, DIR / bin / foo / quux में नहीं। "फू /" उपसर्ग छीन लिया जाता है ताकि आप स्थापित आदेशों को प्राप्त करने के लिए अपने पैट में डीआईआर / बिन जोड़ सकें। यदि 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 में सेट किया गया है और अभी भी यह समस्या है, तो विंडोज़ में आप GOBIN को Base Project DIR\binया तो सेट करने की कोशिश कर सकते हैं %GOPATH%\bin


1

दौड़ते समय सावधानी बरते

export GOPATH=$HOME

यह मानकर चलें कि आपका कोड संबंधित विशिष्ट स्थानों पर मौजूद है GOPATH। इसलिए, इसके बजाय, आप किसी भी गो कमांड को चलाने के लिए docker का उपयोग कर सकते हैं:

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

और अब आप किसी भी गोलांग कमांड का उपयोग कर सकते हैं, उदाहरण के लिए:

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

0

विंडोज़ में, मेरी cmd विंडो पहले से खुली थी जब मैंने GOPATH पर्यावरण चर सेट किया था। पहले मुझे cmd को बंद करना पड़ा और फिर प्रभावी होने के लिए इसे फिर से खोलना पड़ा।


0

समस्या यह है कि आप उस पैकेज निर्देशिका में नहीं हैं जिसमें गो फ़ाइल मुख्य फ़ंक्शन के साथ है और स्थापित करें कमांड को नहीं खोज सकते हैं (गो फ़ाइल मुख्य फ़ंक्शन के साथ जाएं) जिसे आप इंस्टॉल करना चाहते हैं।

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

और फिर चलाएं:

$ go install 

-1

OSX मोजावे 10.14 पर, goहै आम तौर पर पर स्थापित किया /usr/local/go

इसलिए, इन ईएनवी को सेटअप करें और आपको जाने के लिए अच्छा होना चाहिए।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.