Làm cách nào để gỡ cài đặt phiên bản của gói Cabal?


82

Happstack Lite đang phá vỡ tôi vì nó nhận được phiên bản blaze-html 0.5 và nó muốn có phiên bản 0.4. Cabal nói rằng cả hai phiên bản 0.4.3.4 và 0.5.0.0 đều được cài đặt. Tôi muốn xóa 0.5.0.0 và chỉ sử dụng phiên bản cũ hơn. Nhưng cabal không có lệnh "gỡ cài đặt" và khi tôi thử ghc-pkg unregister --force blaze-html, ghc-pkglệnh của tôi đã bị bỏ qua.

Tôi làm gì?

CẬP NHẬT : Đừng tin . Mặc dù ghc-pkgtuyên bố bỏ qua lệnh, lệnh không bị bỏ qua. Và với câu trả lời được chấp nhận của Don Stewart, bạn có thể xóa chính xác phiên bản mà bạn muốn loại bỏ.


2
ghc-pkg list blaze-html? Bạn có chắc mình đang chạy nó với tư cách là người dùng phù hợp? Có thể tuyên bố rõ ràng rằng phiên bản chưa được đăng ký?
ivanm

1
@ivanm cảm ơn vì đã hỏi. Hóa ra ghc-pkg nói dối tôi!
Norman Ramsey

Sắp xếp các bản sao của stackoverflow.com/questions/7252193/... , nhưng tôi miễn cưỡng cờ nó vì ai này tốt hơn :)
Bến Millwood

1
cabal-delete khá hay để tìm và xóa các gói không có.
Tobu

@Tobu Điều gì cabal-uninstall được đề cập trong câu trả lời dưới đây ? Cabal-delete có mạnh hơn không? Nó có thể hoạt động với hộp cát cabal (sẽ cabal exec -- cabal-deletehoạt động chính xác và xóa các gói khỏi hộp cát) không? Tại sao không biến điều này thành một câu trả lời? Nó trông giống như một công cụ tốt.
imz - Ivan Zakharyaschev

Câu trả lời:


95

Bạn có thể ghc-pkg unregistermột phiên bản cụ thể, như sau:

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

Đó là đủ.


17
khi chưa được đăng ký, có bất kỳ tệp nào nằm ở đâu đó cần được cắt bỏ không?
Erik Kaplun

Nhận xét về những nơi khác đề cập rằng ghc-pkg để lại các thư mục xung quanh?
CMCDragonkai

có một cái nhìn tại của bạn ~/.cabal/thư mục để biết thông tin về nơi pkgs và nhị phân là
Leahcim

23

Nếu bạn ở bên ngoài hộp cát:

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

Nếu bạn đang ở trong một hộp cát cabal :

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

Đầu tiên --là dấu phân tách đối số cho hc-pkg. Điều này chạy ghc-pkgtheo cách nhận biết hộp cát.


20

Ngoài ra còn có gói cabal-gỡ cài đặt cung cấp một cabal-uninstalllệnh. Nó hủy đăng ký gói và xóa thư mục. Điều đáng nói là mặc dù nó đi qua --forceđể ghc-pkg unregisternó có thể phá vỡ các gói khác.


1
cabal uninstallkết quả làcabal: unrecognised command: uninstall (try --help)
Steven Shaw

2
@StevenShaw - Liên kết tôi cung cấp đi đến gói hackage mà bạn cần cài đặt để sử dụng. Tôi muốn giới thiệu câu trả lời của Don, đó là những gì tôi sử dụng.
Davorak

Còn cabal-delete khỏi nhận xét ở trên của @Tobu thì sao? Nó tốt hơn hay mạnh hơn cabal-uninstall?
imz - Ivan Zakharyaschev

7

Đây là một tập lệnh shell mà tôi sử dụng để gỡ cài đặt một gói. Nó hỗ trợ nhiều phiên bản GHC đã cài đặt và cũng xóa sạch các tệp có liên quan (nhưng được cung cấp mà không có bảo hành, đừng trách tôi nếu bạn xử lý cài đặt của mình!)

#!/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
Tôi vừa thử điều này trên Mac và nó dường như không hoạt động.
pyrrhic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.