Удаление пакетов, установленных с помощью go get



Я побежал go get package чтобы загрузить пакет, прежде чем узнать, что мне нужно установить мой GOPATH в противном случае этот пакет загрязняет мою корневую установку Go (я бы предпочел, чтобы мой Go install был чистым и отделял ядро от пользовательского). Как удалить пакеты, установленные ранее?

615   3  
go

3 ответов:

безопасно просто удалить исходный каталог и скомпилированный файл пакета. Найдите исходный каталог в разделе $GOPATH/src и файл пакета под $GOPATH/pkg/<architecture>, например: $GOPATH/pkg/windows_amd64.

вы можете удалить архивные файлы и исполняемые двоичные файлы, которые go install (или go get) производит для пакета с go clean -i importpath.... Они обычно находятся под $GOPATH/pkg и $GOPATH/bin, соответственно.

обязательно указывайте ... на пути импорта, так как кажется, что, если пакет содержит исполняемый файл,go clean -i будет только удалить это, а не архивировать файлы для подпакетов, как gore/gocode в Примере.

исходный код затем должен быть удален вручную из $GOPATH/src.

go clean есть -n флаг для сухого запуска, который печатает то, что будет выполняться без его выполнения, поэтому вы можете быть уверены (см. go help clean). Он также имеет заманчивый -r флаг для рекурсивно чистых зависимостей, которые вы, вероятно, не хотите использовать на самом деле, так как вы увидите из сухого запуска, что он удалит много стандартных архивных файлов библиотеки!

полный пример, на котором вы могли бы основать сценарий, если хотите, заключается в следующем один.

$ go get -u github.com/motemen/gore

$ which gore
/Users/ches/src/go/bin/gore

$ go clean -i -n github.com/motemen/gore...
cd /Users/ches/src/go/src/github.com/motemen/gore
rm -f gore gore.exe gore.test gore.test.exe commands commands.exe commands_test commands_test.exe complete complete.exe complete_test complete_test.exe debug debug.exe helpers_test helpers_test.exe liner liner.exe log log.exe main main.exe node node.exe node_test node_test.exe quickfix quickfix.exe session_test session_test.exe terminal_unix terminal_unix.exe terminal_windows terminal_windows.exe utils utils.exe
rm -f /Users/ches/src/go/bin/gore
cd /Users/ches/src/go/src/github.com/motemen/gore/gocode
rm -f gocode.test gocode.test.exe
rm -f /Users/ches/src/go/pkg/darwin_amd64/github.com/motemen/gore/gocode.a

$ go clean -i github.com/motemen/gore...

$ which gore

$ tree $GOPATH/pkg/darwin_amd64/github.com/motemen/gore
/Users/ches/src/go/pkg/darwin_amd64/github.com/motemen/gore

0 directories, 0 files

# If that empty directory really bugs you...
$ rmdir $GOPATH/pkg/darwin_amd64/github.com/motemen/gore

$ rm -rf $GOPATH/src/github.com/motemen/gore

обратите внимание, что эта информация основана на go инструмент в Go версии 1.5.1.

#!/bin/bash

goclean() {
 local pkg=; shift || return 1
 local ost
 local cnt
 local scr

 # Clean removes object files from package source directories (ignore error)
 go clean -i $pkg &>/dev/null

 # Set local variables
 [[ "$(uname -m)" == "x86_64" ]] \
 && ost="$(uname)";ost="${ost,,}_amd64" \
 && cnt="${pkg//[^\/]}"

 # Delete the source directory and compiled package directory(ies)
 if (("${#cnt}" == "2")); then
  rm -rf "${GOPATH%%:*}/src/${pkg%/*}"
  rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*}"
 elif (("${#cnt}" > "2")); then
  rm -rf "${GOPATH%%:*}/src/${pkg%/*/*}"
  rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*/*}"
 fi

 # Reload the current shell
 source ~/.bashrc
}

использование:

# Either launch a new terminal and copy `goclean` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

goclean github.com/your-username/your-repository

Comments

    Ничего не найдено.