GOBIN सेट नहीं किया गया: रन इंस्टॉल नहीं हो सकता


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 को पढ़ें और देखें कि अपनी फ़ाइलों को कैसे सेट करें।
वोल्कर

सर उठाने के लिए धन्यवाद!
user3918985

2
मुझे लगता है कि आप निर्माण के लिए देख रहे हैं।
बनीबेयर

2
मुझे यकीन नहीं है कि मैं सहमत हूं कि यह पूरी तरह से गलत है। जब GOBIN सेट होता है, तो दो अलग-अलग व्यवहार होते हैं: गो बिल्ड <gofile.go> का उपयोग करते समय, निष्पादन योग्य एक ही फ़ोल्डर में बनाया जाता है। गो स्थापित करने का उपयोग करते समय <gofile.go> GOBIN में निष्पादन योग्य बनाया जाता है।
इरेज़ ए। कोर्न

2
FWIW - आरंभ करने के लिए डिफ़ॉल्ट डॉक्स यह अनुशंसा करते हैं कि आप ठीक यही करते हैं। golang.org/doc/install
माइक बकीबी

जवाबों:


46

अद्यतन 2020 जाओ 1.11 और के बाद से जाओ मॉड्यूल की शुरूआत , GOPATHअब और परियोजना प्रति की जरूरत नहीं है, और करने के लिए डिफ़ॉल्ट~/go वैश्विक उपकरणों के लिए / परियोजना तुम करोगी go get

जाओ 1.16 (क्यू 1 2020) डिफ़ॉल्ट होना चाहिए GOBINकरने के लिए GOPATH[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/binGOBINएक परम मार्ग होना चाहिए।


उदाहरण के लिए, यह धागा दिखाता है कि उस मामले में क्या होता है जहाँ एक निर्माण होता है GOPATH/src:

ऐसा लगता है जैसे आपका GOPATHसेट है, ~/goलेकिन आपने go installकमांड को चालू किया है~/dev/go

गो बिल्ड देखें

गो मार्ग निर्देशिका पेड़ों की एक सूची है जिसमें गो स्रोत कोड होता है। यह उन आयातों को हल करने के लिए सलाह दी जाती है जो मानक गो ट्री में नहीं पाए जा सकते हैं।

यदि आपने किया है go build, तो आप एक go install(नहीं custom.go) भी आज़मा सकते हैं : आप पैकेज को स्थापित करना चाहते हैं, एक भी फाइल नहीं।


क्या आपका यह मतलब है? मैंने $ PATH को प्रतिध्वनित किया और यह प्राप्त किया: / लोकल / गो / बिन: / usr / लोकल / mysql / bin
user3918985

76

मैंने गोबिन का रास्ता तय किया और मेरे लिए काम किया

export GOBIN=[WorkspacePath]/bin

2
हाँ, यह सही उत्तर है। बस उस GOPATH में निर्मित / बिन
swdev

7
निर्यात पथ के बाद, मुझे त्रुटि मिली cannot install, GOBIN must be an absolute path:(
lee

@ley क्या आपने उपयोग किया ..या ~आपके द्वारा बताए गए मार्ग में? मुझे वह त्रुटि मिली और बस एक पूर्ण पथ पर स्विच किया गया जैसे कि /home/ben/bin/या भी $HOME/bin/। मेरा पूरा कमांड था (फिशशेल में, v1.11) env GOBIN=$HOME/bin/ go install testfile.go
बेनी जोबिगन

40

एक शुरुआत के रूप में, मैं इस त्रुटि के पार चला गया जब मैं विभिन्न गो कमांड (निर्माण, रन और स्थापित) की कोशिश कर रहा था। संक्षेप में, आप नहीं कर सकते हैं स्थापित करने जाना एक 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)

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

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" को देखते हुए, गो उपकरण, स्रोत कोड / home / nate / work / src में खोजते हैं), अन्य को फ़ाइल सिस्टम के रूप में व्याख्या किया जाता है। अग्रणी अवधि के कारण पथ।

GOPATH डॉक्स भी देखें ।


1
यह वास्तविक समाधान IMO है। go installनिर्देशिकाओं पर काम करता है और यदि आप किसी विशेष फ़ाइल को निर्दिष्ट करते हैं, तो यह इस विशेष समस्या का कारण बन सकता है।
sense 28

13

वास्तव में व्यवहार के 2 विभिन्न प्रकार हैं।

go install <package>

यदि आप GOPATH को सही ढंग से सेट करते हैं, तो इसे कंपाइल में प्रलेखित किया जाता है और संकुल और निर्भरता स्थापित करते हैं।

go install <gofile>

यह प्रलेखित नहीं है और आपको इस मोड में GOBIN env वैरिएबल की आवश्यकता है।


1
go install <gofile>प्रलेखित है, go help packagesजिसमें से go install --helpसंदर्भित है। समस्या यह है कि go install(1.9.2 और पूर्व में) असंगत व्यवहार होता है, एक मामले में इसकी आवश्यकता होती है और दूसरे में इसे GOBIN को स्पष्ट रूप से सेट करने की आवश्यकता नहीं होती है।
Stevo Slavić

7

यदि आपके GOPATH env को आपके कार्यक्षेत्र में सही ढंग से सेट किया गया है, तो विकृत उत्तर के रूप में, आपको GOBIN env वैरिएबल सेट करने की आवश्यकता नहीं है।

कृपया $ go env चलाकर अपने गो पर्यावरण चर की जाँच करें grep -i "^ GO" और GOROOT और GOPATH के लिए बाहर की जाँच करें कि क्या GOROOT आपके GO स्रोत की स्थापना और GOPATH आपके कार्यक्षेत्र की ओर इशारा कर रहा है।

यदि सब कुछ सही है तो सबडिर पर जाएँ जहाँ yourpkg.go रहता है, तो $ go बिल्ड (फ़ाइल नाम के बिना) पहले चलाएं और $ go स्थापित करें (फिर से फ़ाइल का नाम वापस लें), यदि आपको स्क्रीन पर कोई त्रुटि संदेश दिखाई नहीं देता है पैकेज आपके कार्यक्षेत्र / pkg / youros /../ yourpackage.a पर तैयार है


7

साइबरविन के साथ विंडोज़ पर GOBIN को $ GOPATH / बिन पर सेट करना एक अच्छा विचार है।

और विंडो फ़ाइल नाम विभाजक को ठीक से याद रखना याद रखें:

$ 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?
डॉल्फ

1

GOBINवैरिएबल वर्जन सेट करने की आवश्यकता नहीं है और केवल इस पर निर्भर रहना है GOPATH:

  1. GOBINयदि हमारे पास पैकेज नहीं है, तो यह आवश्यक है, यानी फ़ाइल सीधे GOPATHनिर्देशिका में है। यह तब संभव है जब हम शिक्षार्थियों के रूप में गो सुविधाओं को आज़मा रहे हैं

  2. विशिष्ट गो परियोजनाओं के लिए, फाइलें पैकेज निर्देशिकाओं के अंतर्गत हैं। इनके लिए, GOPATHकाफी अच्छा है।

  3. दूसरे शब्दों में, दोनों निम्नलिखित समाधान काम करेंगे: ए। GOBIN$ GOPATH / bin के रूप में स्पष्ट रूप से सेट करें [केवल शिक्षण उद्देश्यों के लिए, बच सकते हैं] b। एक उपनिर्देशिका बनाएं जो आपके पैकेज का नाम होगा और .go फ़ाइलों को उसमें स्थानांतरित करें

  4. मुझे लगता है कि उपयोगिताओं को उपरोक्त त्रुटि को दूर करना चाहिए और परिदृश्य को बेहतर ढंग से संभालना चाहिए - इस आधार पर कि क्या तर्क एक निर्देशिका या स्रोत फ़ाइल है


1

के लिए WINDOWS उपयोगकर्ताओं

कमांड प्रॉम्प्ट ( Win+ rफिर टाइप करें cmd) या एक पॉवरशेल विंडो ( Win+ xटाइप करें i) खोलें ।

GOPATH की स्थापना

नोट: आपके गो स्थापना के समान पथ 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

विंडोज में:

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

go envGOBIN सेट होने वाली कमांड के साथ पुष्टि करें , फिर go installबिन निर्देशिका में कमांड ठीक से निष्पादन योग्य को बचाता है।


1

मुझे भी एक ही परेशानी थी (GOBIN को अलग से सेट करने की आवश्यकता नहीं है), सुनिश्चित करें कि आपके पास निम्नलिखित हैं

  1. GOPATH सेट है (यह GOBIN को स्वतः GOPATH / बिन के रूप में सेट करता है)
  2. GOPATH में निम्न निर्देशिका बिन, pkg, src है
  3. custom.go को src / <your_module> के अंतर्गत रखा गया है
  4. फिर भागो go install <your_module>
  5. आप बिन फ़ोल्डर के तहत संकलित बाइनरी (<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) और इंस्टॉल किए गए कमांड (GOPATH / बिन में, जब तक GOBIN सेट नहीं होता है) को संग्रहीत करता है।

तो, ऐसा लगता है कि मूल रूप से आप GOBIN का उपयोग अस्थायी रूप से या स्थायी रूप से डिफ़ॉल्ट बाइनरी इंस्टॉल स्थान (यानी $GOPATH/bin) को ओवरराइड कर सकते हैं । मुझे 1-फाइल गो "स्क्रिप्ट" का उपयोग करके सफलता मिली env GOBIN=$HOME/bin/ go install testfile.go। यह v1.11 का उपयोग करके किया गया था।


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