Installing packages in a local directory
Solution 1
You can export the env variable GOPATH
. For me it is ~/local/lib/go
. This folder has the subfolders bin
, pkg
and src
, so it's just like /usr/local/go
. The go
-tool will then automatically download , build and install packages into this directory.
Solution 2
To expand on keks answer, you can update your .bashrc to look like this
export GOROOT=/usr/local/go
export GOPATH=~/workspace/me/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Now all packages installed with go get
are separate from the go distribution.
Solution 3
You might want to consider using Go Version Manager (gvm).
Apart from switching between Go versions easily, it also lets you switch between pkgsets ("workspaces").
First you create a set
gvm pkgset create myproject
and then you use it
gvm pkgset use myproject
Works like a charm.
Solution 4
In modern module enabled go (introduced in go 1.11), you can use the gobin program with a GOBIN env var specifying the destination of the binary:
GOBIN=./local gobin github.com/robfig/revel
Installation of gobin is done like so:
GO111MODULE=off go get -u github.com/myitcv/gobin
Related videos on Youtube
topskip
I like to write software, for example for database publishing https://github.com/speedata/publisher/. Sometimes I work on my book about Go (in German).
Updated on July 09, 2022Comments
-
topskip almost 2 years
What is the best practice to install packages (those with
go get...
) in a local directory?Example: I'd like to try out the Revel web framework, but I don't want to clutter my go installation at
/usr/local/go
.Normally I'd say
sudo go get github.com/robfig/revel
as written on the home page, but that would install it beneath/usr/local/go/src/pkg/...
.Is there an easy way to say (for example)
go get --local ...
and have the package in the current (sub) directory?-
topskip almost 12 yearsHard to chose which answer to accept. For the moment I've only played with
GOPATH
, so @keks's answer is the one I chose, but this might change in the future :)
-