Не вдалося встановити помилку: помилка установки для каталогу 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 build працює на відмінно.

Ось моя 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, і він був встановлений з домашньою мовою.

Відповіді:


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, хоча я ділюся вашими розчаруваннями, я повинен зазначити, що більшість інших мов насправді використовують ці, але, можливо, вони не такі видимі. Наприклад, Python (мова, відома своєю простотою) має PYTHONHOMEзамість GOROOTі PYTHONPATHзамість GOPATH. Навіть (ГХ) З має LIBRARY_PATH, C_INCLUDE_PATHі т.д.
Hut8

1
Я отримую цю помилку після того, як export GOPATH=$PWD(стоїть біля кореня дерева-клона Голанг), ваша відповідь не може пояснити помилку в цьому випадку.
ulidtko

2
Для мене, помістити його в $ GOPATH було недостатньо. Потрібно було бути в каталозі під $ GOPATH / src /
Томас

9
Я впевнений, що є якась дуже вагома причина, щоб виправдати існування GOPATH, але ззовні, дивлячись на це, це здається абсолютно безглуздим. Чому мені потрібно мутувати глобальні змінні середовища просто для того, щоб створити пакет локально 🤔
Олександр -

193

Для будь-яких користувачів ОС 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), потім перемістився у відповідний каталог (де я пишу свій код) і набрав go install ... той же результат go install: немає місця установки для каталогу ....
stian

Рядок 296 - це лише повернення заяви?
Фелікс Рабе

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, і це не спрацювало для мене.
Кацкуль

5

Вам потрібно буде мати 3 каталоги всередині обраного вами каталогу GOPATH.

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

Тоді ви запускаєте go installвсередину або якусь програму (яка ставить виконуваний файл у бін), або якусь бібліотеку (що ставить бібліотеку в кг).


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 gopathcmd, і прочитав жирний текст в інструкції,

тобто , якщо код wnat установки знаходиться ..BaseDir...\SomeProject\src\basic\set, то GOPATH не повинен бути таким же адресою як код, він повинен бути тільки Base Project DIR: ..BaseDir...\SomeProject.

Змінна середовища GOPATH перераховує місця для пошуку коду Go. У Unix значення є розділеною двокрапкою. У Windows значення є розділеною комою крапкою з комою. На Плані 9 значенням є список.

Якщо змінна середовища не встановлена, GOPATH встановлює підкаталог з назвою "йти" в домашній каталог користувача ($ HOME / перейти на 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 встановлено на Base Project DIR і все ще має цю проблему, у Windows можна спробувати встановити GOBIN як Base Project DIR\binабо %GOPATH%\bin.


1

Обережні при бігу

export GOPATH=$HOME

Припустимо, ваш код існує в конкретних місцях, пов’язаних із GOPATH. Отже, замість цього ви можете використовувати docker для запуску будь-якої команди 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 install не може знайти команду (go file з go main function), яку ви хочете встановити.

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

а потім запустіть:

$ go install 

-1

На OSX Mojave 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.