web-dev-qa-db-fra.com

GOBIN non défini: impossible d'exécuter aller installer

J'essaie d'installer mon package personnalisé pour mon fichier main.go. Cependant, quand j'ai couru

go install custom.go

J'ai eu cette erreur

go install: no install location for .go files listed on command line (GOBIN not set)

Comment définir GOBIN?

71
user3918985

Vérifiez votre variable GOPATH.
Assure-toi:

  • vos sources sont sous GOPATH/src
  • vous avez un dossier bin dans votre dossier GOPATH.

Voir Variable d'environnement GOPATH (où 'DIR' est un dossier GOPATH):

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. 


Par exemple, ce fil illustre ce qui se passe dans le cas où une compilation est effectuée en dehors de GOPATH/src:

On dirait que votre GOPATH est définie sur ~/go mais que vous avez exécuté la commande go install sur ~/dev/go

Voir Go Build

Le chemin d'accès est une liste d'arborescence de répertoires contenant le code source Go. Il est consulté pour résoudre les importations qui ne peuvent pas être trouvées dans l'arborescence Go standard.

Si vous avez terminé go build, vous pouvez également essayer un go install (no custom.go): vous voulez installer le paquet, pas un seul fichier.

35
VonC

J'ai défini le chemin GOBIN et cela a fonctionné pour moi

export GOBIN=[WorkspacePath]/bin
53
Pratik Goenka

En tant que débutant, j'ai rencontré cette erreur lorsque j'essayais diverses commandes d'accès (construction, exécution et installation). En bref, vous ne pouvez pas aller installer un nomfichier.go. Vous pouvez uniquement installer un package.

C'était déroutant, car j'avais appris que:

nate:~/work/src/dir $ go run hello/hello.go
hello, world.

fonctionne très bien. Mais je ne pouvais pas comprendre pourquoi install ne fonctionnerait pas:

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)

Peu importe le répertoire dans lequel j'étais

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)

Cette confusion est due au fait que go runseulement _ fonctionne avec les fichiers source Go (les noms de fichiers se terminant par .go) et go installuniquement accepte les packages. Les packages sont nommés d'après leur chemin d'importation ou leur chemin d'accès au système de fichiers. Ainsi:

nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .

tout fonctionne très bien. Le premier fait référence au paquet par chemin d'importation ((étant donné que $ GOPATH = "/ home/nate/work", les outils go recherchent le code source dans/home/nate/work/src), les autres sont interprétés comme un système de fichiers. chemins à cause des périodes principales.

Voir aussi les Docs GOPATH .

30
Nate Green

En fait, il existe 2 types de comportement différents.

go install <package>

ceci est documenté dans Compilez et installez les packages et les dépendances Vous n’avez pas besoin de GOBIN si vous définissez GOPATH correctement.

go install <gofile>

ceci n'est pas documenté et vous avez besoin de la variable env GOBIN dans ce mode.

10
PickBoy

Sur les fenêtres avec cygwin, il semble être judicieux de configurer GOBIN avec $ GOPATH/bin.

et souvenez-vous d'échapper correctement au séparateur de noms de fichiers Windows:

$ 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
7
Carl Binding

Comme indiqué précédemment dans les réponses, si votre env. GOPATH est correctement défini sur votre espace de travail, vous n'avez pas besoin de définir la variable env. GOBIN.

Veuillez vérifier vos variables d'environnement go en exécutant $ go env | grep -i "^ GO" et cherchez GOROOT et GOPATH pour vérifier si GOROOT pointe vers votre installation source GO et GOPATH vers votre espace de travail.

Si tout est correct, accédez au sous-répertoire où réside votrepkg.go, puis lancez d'abord $ go build (sans nom de fichier), puis $ go install (à nouveau avec notre nom de fichier), si aucun message d'erreur ne s'affiche à l'écran, le paquet est prêt dans votre espace de travail/pkg/youros /../ yourpackage.a 

5
user42754

Pour le système *nix, regardez où go est installé, en exécutant la commande suivante:

$ which go

quelle sortie disons:

/usr/local/go/bin/go

puis ajoutez les entrées suivantes dans ~/.bash_profile ou dans ~/.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

P.S: N'oubliez pas de source ~/.bash_profile ou ~/.zshrc, comme suit:

$ source ~/.bash_profile
3
Arpit

Vous n'avez pas besoin de $ GOBIN si vous avez défini un $ GOPATH correctement. Si tel est le cas, vérifiez simplement si votre projet réside dans le dossier $ GOPATH/src .

0
voogieJames

De https://golang.org/cmd/go/#hdr-Environment_variables :

GOBIN Le répertoire où "installer" installera une commande.

et https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :

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.

et https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more

En mode module, GOPATH ne définit plus la signification des importations lors d'une construction, mais stocke les dépendances téléchargées (dans GOPATH/pkg/mod) et les commandes installées (dans GOPATH/bin, sauf si GOBIN est défini).

Il semble donc que vous pouvez utiliser GOBIN pour remplacer temporairement ou définitivement l’emplacement d’installation binaire par défaut (c.-à-d. $GOPATH/bin). J'ai réussi à installer un script "1 fichier" utilisant env GOBIN=$HOME/bin/ go install testfile.go. Cela a été fait en utilisant go v1.11.

0
Benny Jobigan

En ce qui concerne la définition de la version de la variable GOBIN ne la nécessitant pas et en s’appuyant simplement sur GOPATH:

  1. GOBIN est requis si nous n’avons pas de paquet, c’est-à-dire que le fichier se trouve directement dans le répertoire GOPATH. Ceci est probable lorsque nous essayons les fonctionnalités Go en tant qu'apprenants

  2. Pour les projets Go typiques, les fichiers se trouvent sous les répertoires du package. GOPATH est suffisant.

  3. En d'autres termes, les deux solutions suivantes fonctionneraient: une. Définissez GOBIN explicitement comme $ GOPATH/bin [uniquement à des fins d'apprentissage, vous pouvez éviter] b. Créez un sous-répertoire qui serait le nom de votre package et déplacez-y les fichiers .go 

  4. J'imagine que les utilitaires Go devraient supprimer l'erreur ci-dessus et gérer le scénario mieux, selon que l'argument est un répertoire ou un fichier source.

0