神秘的なカバルインストールの問題
-
30-09-2019 - |
質問
「Haskellプラットフォーム」をきれいにインストールします。 (OS X Snow-Leopard&Platform2010.1.0.1)、これを行うと、シンプルなシーケンスが非常に奇妙になります cabal install
行動:
$ cabal install time
$ cabal install random
$ ghc-pkg list random
/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.1/package.conf.d
random-1.0.0.2
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
random-1.0.0.2
random-1.0.0.2
私のシステムに2回インストールされています。そして今やっています cabal install random
再インストールします random-1.0.0.2
毎回。
ように見えます random
に依存します time
, 、そしてCabalは新しいバージョンがある後にそれを再インストールしたいと考えています time
利用可能?そして2つのため random-1.0.0.2
カバルは混乱しており、最初のものを見ているので、常に最新ではないと考えていますか?
ghc-pkg check
エラーが見つかりません。
解決 3
これまでのところ、これまでに機能していた作業を説明します。私は多くの異なることを試しましたが、ここではうまくいった試みについて説明します。
(ところで:私はMac OS X 10.6.4を使用していますが、あなたの結果はシステムによって異なるかもしれません)
- ソースからGHC 6.12.3をインストールしました。 GHCの構築に必要なため、以前のGHCを削除しないでください。
- Symlinksを削除しました
/usr/bin
(にとってghc
,ghci
,ghc-pkg
, 、 とrunhaskell
)Haskell Platform 2010.1.0.1インストーラーの以前のGHCに。 - インストールしました
cabal-install
それを使用しますbootstrap.sh
脚本。 - パッチ付きバージョンをインストールしました
random
とhaskell98
パッケージ。違いは彼らの中にあります.cabal
ファイル- ぶつかった
random
までのバージョンまで1.0.0.2.1
依存して変更しましたtime
することがtime == 1.1.*
- ぶつかった
haskell98
までのバージョンまで1.0.1.1.1
以上です
- ぶつかった
- 走った
cabal update
とcabal upgrade
どのパッケージが古くなっているかを確認します。やったcabal install
それらの。これは安定状態に到達するのに役立つと思います。 (ご了承くださいsyb
インストールは失敗しましたcabal install parsec
それについて何もすることは何もないと言ったcabal upgrade
別の言い方をした。だから私はこれらの2つのパッケージを一人で残しました)
実行してセットアップが問題ないことを検証しました ghc-pkg check
ステージ間。パッケージが以前のバージョンで再インストールされ、同じバージョン番号とそれに依存するパッケージを再インストールする必要があるため、壊れる場合があります。それが起こったとき私 cabal install
再び壊れたパッケージ。
また、次のプログラムを使用して、セットアップに同じバージョンの2つのパッケージが含まれていないことを確認しました。
import Data.List (sort)
import Data.Maybe (fromJust)
import System.IO (hGetContents)
import System.Process (CreateProcess (std_out), StdStream (CreatePipe), createProcess, shell)
main :: IO ()
main = do
pkgListRaw <-
createProcess (shell "ghc-pkg list") { std_out = CreatePipe }
>>= hGetContents . fromJust . sndOfFourTup
let pkgListSorted = sort . filter (not . null) $ lines pkgListRaw
putStrLn .
unlines . map (dropWhile (== ' ') . fst) .
filter (uncurry (==)) . zip pkgListSorted $ tail pkgListSorted
where
sndOfFourTup (_, x, _, _) = x
私
cabal install
編hlint
,yesod
,haddock
,HDBC-mysql
,hakyll
その他のパッケージ、そしてicabal install
私のセットアップが「安定した状態」に達するまで、前のリストを何度も何度も編集しますcabal install
それらのいずれも再インストールしません。私が取り組んでいる私自身のプログラムが現在コンパイルと仕事をしていることを確認しました。今はすべて大丈夫のようです
ノート:
- Haskell Platform 2010.1.0.1を機能させることはできませんでした。 GHC 6.12.3にアップグレードした後、物事は私のために機能しました。皮肉なことに(?)、これはGHCのダウンロードページに関する推奨事項に反します。
止まる!
ほとんどのユーザーには、GHCの代わりにHaskellプラットフォームをインストールすることをお勧めします。現在のHaskellプラットフォームのリリースには、最近のGHCリリースと、他のいくつかのツール(Cabalなど)、および一緒に機能することが知られているより大きなライブラリセットが含まれます。
この回避策は、おそらく将来も壊れるでしょう。これはおそらく数ヶ月で起こると思います。のようなコアライブラリ
random
更新され、依存関係の問題が再び解明され始めます。その後、セットアップを修正するのに時間を費やす必要があります。おそらく、新しいGHCにアップグレードする必要があります。しかし、誰が知っているか、多分それは、依存関係に関連する問題を解決するためにハッキングパッケージが更新されると安定する古いリリースになるでしょう。あなたへのサービスとして、私はこの質問を更新し、時が来たら答えます。 (他の人もこの問題を抱えていると仮定して。これまでのところ、Simon MarlowとPeakerもこの問題に直面していることを検証しました)Haskellのセットアップが壊れていることを知る方法(これらのいずれかが当てはまる場合、セットアップは壊れます):
- 何もうまくいきません
ghc-pkg check
壊れていると言います- 上記のこの回答に入ったソースの短いプログラムは、まったく同じバージョンで2回パッケージをインストールしていることがわかります
cabal update
そして、サイクルcabal install
上に書いたパッケージのリスト、または別のリスト(できれば多くの依存関係を持つ大きなリスト)を使用します。安定した状態に到達しない場合(サイクルの反復は常に何かを再インストールします)、セットアップは壊れています。 警告: :このステップは、現在機能しているHaskellセットアップを破壊する可能性があります。 Maso-Curiousである場合、またはセットアップが壊れた後にセットアップを修正することをいとわない場合(時間がかかる可能性のあるプロセス)
あなたのセットアップが壊れているのか、それとも機能しているのかを知りたいです。これは私を助けるかもしれません。たとえば、GHC 6.10のセットアップが正常に動作していることがわかった場合、Haskellなどを試すように誰かに推奨する機会に、これらのセットアップを人々に推奨することができます。
これが、同じまたは同様の問題に直面している他の人に役立つことを願っています。サイモンマーローとジョンに感謝します!
他のヒント
してください
ghc-pkg check
そして、それがエラーを示していない場合は、からの出力を見てみましょう
ghc-pkg list -v
と
cabal install random -v
編集: :GHC 6.12.1での問題を再現できますが、6.12.2では、まったく同じバージョンのCabal-Install(0.8.0)を使用します。調べます。
編集2: バグとして報告されています Cabal-Installで。
私は2つの可能な解決策を持っていますが、どちらもやや危険ですが、動作するインストールを取得するはずです。サイモンがこれをフォローしてくれてうれしいです。なぜなら、それは私にとってある種のバグのように聞こえるからです。動作するインストールを取得するには、最初に次のことを試してみます。
ghc-pkg unregister random
次に、GHC-PKGリストをランダムに実行して、インストールされているものを確認します。あなたはまだ /ライブラリ /フレームワークバージョン(プラットフォームから)を持っていると思いますが、新しくインストールされたバージョンはなくなります。この場合は、次のステップに進みます。そうでない場合は、おそらくプラットフォームのきれいな再インストールを行う必要があります。
プラットフォームがまだ存在していると仮定すると、これを行います。
cabal unpack random
ディレクトリへのCDは、バージョンを1.0.0.2.1にぶつけて.cabalファイルを編集し、.cabalファイルを編集します(別のフィールドを追加して1つずつインクリメントします)。次に、そのディレクトリからCABALインストールを行うと、新しいランダムをインストールする必要があります。これにはプラットフォームランダムとは異なるバージョンがあるため、2つは安全に共存できます。
GHC-PKG Unregisterを実行するのではなく、登録ファイルをから直接削除できます
/users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
ファイル名にはハッシュが追加されているため、実際に値を取得するには、ディレクトリの内容を調べる必要があります。ファイルを削除するだけで、GHC-PKGとCABALはそれから表示されません。これはプラットフォームのインストールには触れません(その意味ではより安全です)が、他のインストールされたパッケージをホースする可能性はまだあります。この後、上記のようにバージョンを開梱してインクリメントすることにより、ランダムパッケージを再インストールできます。