Cabal paketinin bir sürümünü nasıl kaldırabilirim?


82

Happstack Lite beni kırıyor çünkü blaze-html 0.5 sürümünü alıyor ve 0.4 sürümünü istiyor. Cabal, 0.4.3.4 ve 0.5.0.0 sürümlerinin her ikisinin de kurulu olduğunu söylüyor . 0.5.0.0'ı kaldırmak ve sadece eski sürümü kullanmak istiyorum. Ama Cabal "Kaldır" komutunu var ve çalışırken değil ghc-pkg unregister --force blaze-html, ghc-pkgbenim komut göz ardı kaydedildiği ifade edildi.

Ben ne yaparım?

GÜNCELLEME : Do not believe it . ghc-pkgKomutu görmezden geldiği iddia edilse de , komut göz ardı edilmez . Ve Don Stewart'ın kabul ettiği yanıtla, ortadan kaldırmak istediğiniz sürümü tam olarak kaldırabilirsiniz.


2
ghc-pkg list blaze-html? Doğru kullanıcı olarak çalıştırdığınızdan emin misiniz? Kayıtsız sürümü açıkça belirtebilir misiniz?
ivanm

1
@ivanm sorduğun için teşekkürler. Bana ghc-pkg yalan söylediği ortaya çıktı !
Norman Ramsey

Bir tür stackoverflow.com/questions/7252193/… kopyası gibi , ancak bu daha iyi olduğu için işaretlemek istemiyorum :)
Ben Millwood

1
cabal-delete , sahipsiz paketleri bulmak ve kaldırmak için oldukça iyidir.
Tobu

@Tobu cabal-uninstall Aşağıdaki cevapta ne bahsediliyor ? Cabal-delete daha mı güçlü? Kabal korumalı alanıyla cabal exec -- cabal-deleteçalışabilir mi (doğru çalışacak ve korumalı alandan paketleri silecek)? Neden bunu da bir cevap haline getirmiyorsun? Güzel bir alet gibi görünüyor.
imz - Ivan Zakharyaschev

Yanıtlar:


95

Aşağıdaki ghc-pkg unregistergibi belirli bir sürümü yapabilirsiniz :

$ ghc-pkg unregister --force regex-compat-0.95.1

Bu yeterli olmalı.


18
bir kez kayıtsız bırakıldıktan sonra, bir yerlerde budanması gereken herhangi bir dosya var mı?
Erik Kaplun

Diğer yerlerdeki yorumlarda ghc-pkg'nin etrafta klasörler bıraktığı belirtiliyor?
CMCDragonkai

~/.cabal/
pkgs

23

Korumalı alanın dışındaysanız:

ghc-pkg unregister --force regex-compat-0.95.1

Bir cabal korumalı alanı içindeyseniz :

cabal sandbox hc-pkg -- unregister attoparsec --force

Birincisi --, için bağımsız değişken ayırıcıdır hc-pkg. Bu, ghc-pkgkorumalı alana duyarlı bir şekilde çalışır .


20

Orada da cabal-kaldırma bir sağlar paket cabal-uninstallkomutu. Paketin kaydını siler ve klasörü siler. Diğer paketleri kırabilmesi --forceiçin geçmesine rağmen bahsetmeye değer ghc-pkg unregister.


1
cabal uninstallsonuçlacabal: unrecognised command: uninstall (try --help)
Steven Shaw

2
@StevenShaw - Sağladığım bağlantı, kullanmak için yüklemeniz gereken bir hackage paketine gidiyor. Don'un cevabını tavsiye ederim, kullandığım şey bu.
Davorak

@Tobu tarafından yapılan bir yorumdan cabal-delete ne olacak? Cabal-uninstall'den daha mı iyi yoksa daha mı güçlü?
imz - Ivan Zakharyaschev

7

İşte bir paketi kaldırmak için kullandığım bir kabuk betiği. GHC'nin birden fazla kurulu sürümünü destekler ve ilgili dosyaları da siler (ancak garanti verilmeden sağlanır, kurulumunuzu hortumlandırırsanız beni suçlamayın!)

#!/bin/bash -eu
# Usage: ./uninstall.sh [--force | --no-unregister] pkgname-version

# if you set VER in the environment to e.g. "-7.0.1" you can use
# the ghc-pkg associated with a different GHC version
: ${VER:=}

if [ "$#" -lt 1 ]
then
        echo "Usage: $0 [--force | --no-unregister] pkgname-version"
        exit 1
fi

if [ "$1" == "--force" ]
then force=--force; shift; # passed to ghc-pkg unregister
else force=
fi

if [ "$1" == "--no-unregister" ]
then shift # skip unregistering and just delete files
else
        if [ "$(ghc-pkg$VER latest $1)" != "$1" ]
        then
                # full version not specified: list options and exit
                ghc-pkg$VER list $1; exit 1
        fi
        ghc-pkg$VER unregister $force $1
fi

# wipe library files
rm -rfv -- ~/.cabal/lib/$1/ghc-$(ghc$VER --numeric-version)/

# if the directory is left empty, i.e. not on any other GHC version
if rmdir -- ~/.cabal/lib/$1 
then rm -rfv -- ~/.cabal/share/{,doc/}$1 # then wipe the shared files as well
fi

1
Bunu Mac'te denedim ve işe yaramadı.
pyrrhic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.