web-dev-qa-db-fra.com

L'installation va échouer avec l'erreur suivante: pas d'emplacement d'installation pour le répertoire xxx en dehors de GOPATH

~/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

Quelle que soit la structure du projet, celle-ci échoue toujours avec le même message. Allez construire fonctionne parfaitement.

Voici mon 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"

Ceci est sur Mac OSX Mountain Lion et go a été installé avec homebrew.

132
tgandrews

Lorsque vous ne fournissez aucun argument à go install, la tentative d'installation du package dans le répertoire en cours est utilisée par défaut. Le message d'erreur vous indique qu'il ne peut pas le faire car le répertoire en cours ne fait pas partie de votre $GOPATH.

Vous pouvez soit:

  • Définissez $GOPATH dans votre $ HOME (export GOPATH=$HOME).
  • Déplacez votre source dans le $GOPATH (mv ~/src/go-statsd-client /User/me/gopath] actuel).

Après soit, aller dans le répertoire go-statsd-client et taper go install fonctionnera, et donc taper go install go-statsd-client de n'importe où dans le système de fichiers. Les binaires construits iront dans $GOPATH/bin.

En tant que suggestion non liée, vous souhaiterez probablement attribuer un nom de domaine à votre paquet, afin d'éviter les conflits de noms (par exemple, github.com/you/go-statsd-client, si c'est là que se trouve votre code source).

100
Gustavo Niemeyer

Pour tous les utilisateurs OS X et futurs, vous devez également définir GOBIN pour éviter ce message déroutant lors de l'installation et go get

mkdir bin 
export GOBIN=$GOPATH/bin
160
Benjamin Wootton

Vous utilisez allez installer sur un répertoire situé en dehors du dossier GOPATH. Définissez votre variable env GOBIN ou déplacez le dossier src dans GOPATH.

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

Plus d'informations: code source GO BUILD , ligne 296

27
Andrea Di Persio

Vous devez configurer à la fois GOPATH et GOBIN. Assurez-vous d’avoir effectué les opérations suivantes (veuillez remplacer ~/go par votre GOPATH préféré et par la suite changer GOBIN). Ceci est testé sur Ubuntu 16.04 LTS.

export GOPATH=~/go 

mkdir ~/go/bin

export GOBIN=$GOPATH/bin

La réponse choisie n'a pas résolu le problème pour moi.

13
Zhenhua

Vous voudrez avoir 3 répertoires dans votre répertoire GOPATH choisi.

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

Ensuite, vous lancerez go install depuis un programme (qui place un exécutable dans bin) ou une bibliothèque (qui placera une bibliothèque dans pkg).

5
Earl Zedd

Pour ce que ça vaut, voici mon .bash_profile, qui marche bien pour moi sur un mac avec Atom, après l’installation de go avec Homebrew:

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

J'ai eu ce problème sous Windows.

Mon problème était que ma variable d’environnement %GOPATH% était définie sur

C:\Users\john\src\goworkspace

au lieu de

C:\Users\john\src\goworkspace\

L'ajout de la barre oblique manquante à la fin l'a corrigé pour moi.

3
eckza

Dans mon cas (OS X), c’est parce que j’ai réglé GOPATH sur /home/username/go (comme dans le livre) au lieu de /Users/username/go.

2
asdfasdfads

Je suis sous Windows et je l’ai obtenue en donnant la commande go help gopath à cmd et en lisant le texte en gras dans l’instruction,

c’est-à-dire que si le code que vous souhaitez installer se trouve à ..BaseDir...\SomeProject\src\basic\set, le GOPATH ne devrait pas être au même emplacement que le code, il devrait l'être juste le projet de base DIR: ..BaseDir...\SomeProject.

La variable d'environnement GOPATH répertorie les emplacements dans lesquels rechercher le code Go. Sous Unix, la valeur est une chaîne séparée par deux-points. Sous Windows, la valeur est une chaîne séparée par des points-virgules. Sur le plan 9, la valeur est une liste.

Si la variable d'environnement n'est pas définie, GOPATH utilise par défaut un sous-répertoire nommé "go" dans le répertoire de base de l'utilisateur ($ HOME/go sur Unix,% USERPROFILE%\go sous Windows), à moins que ce répertoire ne contienne une distribution Go. Exécutez "go env GOPATH" pour voir le GOPATH actuel.

Voir https://golang.org/wiki/SettingGOPATH pour définir un GOPATH personnalisé.

Chaque répertoire répertorié dans GOPATH doit avoir une structure prescrite:

Le répertoire src contient le code source. Le chemin sous src détermine le chemin d'importation ou le nom de l'exécutable.

Le répertoire pkg contient les objets de package installés. Comme dans l'arborescence Go, chaque paire de systèmes d'exploitation et d'architectes cibles possède son propre sous-répertoire pkg (pkg/GOOS_GOARCH).

Si DIR est un répertoire répertorié dans GOPATH, un paquet avec la source dans DIR/src/foo/bar peut être importé sous le nom "foo/bar" et son formulaire compilé doit être installé dans "DIR/pkg/GOOS_GOARCH/foo/bar.a ".

Le répertoire bin contient les commandes compilées. Chaque commande est nommée pour son répertoire source, mais uniquement pour l'élément final, pas pour le chemin d'accès complet. C'est-à-dire que la commande avec source dans DIR/src/foo/quux est installée dans DIR/bin/quux, et non pas DIR/bin/foo/quux. Le préfixe "foo /" est supprimé afin que vous puissiez ajouter DIR/bin à votre PATH pour accéder aux commandes installées. Si la variable d'environnement GOBIN est définie, les commandes sont installées dans le répertoire qu'il nomme à la place de DIR/bin. GOBIN doit être un chemin absolu.

Voici un exemple de disposition de répertoire:

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)

..........

si GOPATH a été défini sur Base Project DIR et a toujours ce problème, dans Windows, vous pouvez essayer de définir GOBIN comme Base Project DIR\bin ou %GOPATH%\bin.

1
yu yang Jian

Sur OSX Mojave 10.14, go est généralement installé sur /usr/local/go.

Par conséquent, configurez ces ENV et vous devriez être prêt à partir.

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

Ajoutez-les également à votre bash_profile ou zsh_profile si cela fonctionne.

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

0
A Null Pointer

Dans Windows, ma fenêtre de commande était déjà ouverte lorsque j'ai défini la variable d'environnement GOPATH. J'ai d'abord dû fermer le cmd puis rouvrir pour qu'il soit efficace.

0
lode

Il y a plusieurs façons de résoudre ce problème qui ont été définies dans ce fil et ailleurs, mais ce que la plupart des gens oublient, c'est que plus que de simplement résoudre le problème actuel, nous essayons également de résoudre le problème si nous nous trompons dans la conception du projet ou souhaité par les créateurs du projet.

Tout d'abord, vous devez corriger votre variable $ GOPATH. Soln: définissez-le sur le chemin de base de votre projet. Deuxièmement, vous devez définir un point d’entrée dans votre projet. Habituellement défini en utilisant 'main'.

C'est ainsi que l'exécution du projet comprend le répertoire de travail de base et le point de travail de votre programme.

0

Attention en courant

export GOPATH=$HOME

Allez supposer que votre code existe dans des endroits spécifiques liés à GOPATH. Vous pouvez donc utiliser docker pour exécuter n’importe quelle commande go:

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

Et maintenant, vous pouvez utiliser n’importe quelle commande golang, par exemple:

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

Le problème est que vous ne vous trouvez pas dans le répertoire du package contenant le fichier go avec la fonction principale go et que go install ne trouve pas la commande que vous souhaitez installer (fichier go avec la fonction main go).

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

puis lancez:

$ go install 
0
Margach Chris