Як я можу видалити версію пакета Cabal?


82

Happstack Lite ломить мене, тому що він отримує blaze-html версію 0.5 і хоче версію 0.4. Кабал каже, що встановлені обидві версії 0.4.3.4 та 0.5.0.0. Я хочу видалити 0.5.0.0 і використовувати лише стару версію. Але у cabal немає команди "видалити", і коли я намагаюся ghc-pkg unregister --force blaze-html, ghc-pkgкаже, що моя команда була проігнорована.

Що мені робити?

ОНОВЛЕННЯ : Не вірте . Хоча і ghc-pkgстверджує, що ігнорує команду, команда не ігнорується. А за прийнятою відповіддю Дона Стюарта ви можете видалити саме ту версію, яку ви хочете виключити.


2
ghc-pkg list blaze-html? Ви впевнені, що використовуєте його як правильний користувач? Можливо, прямо вказати версію для незареєстрованої?
ivanm

1
@ivanm дякую за запитання. Виявляється, мені ghc-pkg брехали !
Норман Ремзі

Начебто дублікат stackoverflow.com/questions/7252193/… , але я неохоче позначаю це, тому що це краще :)
Бен Міллвуд,

1
cabal-delete досить приємно знаходити та видаляти осиротілі пакунки.
Тобу

@Tobu Що можна сказати про cabal-uninstall відповідь нижче ? Чи є cabal-delete потужнішим? Чи може він працювати з пісочницею cabal (буде cabal exec -- cabal-deleteпрацювати правильно і видаляти пакети з пісочниці)? Чому б не зробити це відповіддю теж? Це виглядає як приємний інструмент.
imz - Іван Захарящев

Відповіді:


95

Ви можете ghc-pkg unregisterвстановити певну версію, наприклад:

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

Цього має бути достатньо.


18
після реєстрації, чи десь десь лежать файли, які слід обрізати?
Ерік Каплун,

У коментарях до інших місць згадується, що ghc-pkg залишає папки навколо?
CMCDragonkai

подивіться у своїй ~/.cabal/папці інформацію про те, де знаходяться pkgs та двійкові файли
Leahcim

23

Якщо ви знаходитесь поза пісочницею:

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

Якщо ви знаходитесь всередині пісочниці для кабелів :

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

Перший --- це розділювач аргументів для hc-pkg. Це працює ghc-pkgв пісочниці.


20

Існує також пакет cabal-uninstall, який надає cabal-uninstallкоманду. Він скасовує реєстрацію пакета та видаляє папку. Варто зазначити, що він переходить --forceдо, ghc-pkg unregisterщоб він міг зламати інші пакети.


1
cabal uninstallрезультати вcabal: unrecognised command: uninstall (try --help)
Стівен Шоу

2
@StevenShaw - посилання, яке я надав, спрямовується на пакет злому, який потрібно встановити для використання. Я б порекомендував відповідь Дона, саме цим я і користуюся.
Даворак

А як щодо cabal-delete з коментаря вище @Tobu? Це краще чи потужніше, ніж cabal-uninstall?
imz - Іван Захарящев

7

Ось сценарій оболонки, який я використовую для видалення пакета. Він підтримує кілька встановлених версій GHC, а також стирає відповідні файли (але надається без гарантії, не звинувачуйте мене, якщо ви встановлюєте шланг!)

#!/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
Я щойно спробував це на Mac, і, здається, це не працює.
піррічний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.