9

「Haskell Platform」のクリーンインストール。(OS X Snow-Leopard & Platform 2010.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エラーは見つかりません。

4

3 に答える 3

6

してください

ghc-pkg check

エラーが表示されない場合は、次の出力を見てみましょう

ghc-pkg list -v

cabal install random -v

編集:正確に同じバージョンのcabal-install(0.8.0)を使用して、GHC 6.12.1で問題を再現できますが、6.12.2では再現できません。調べてみます。

編集 2 : cabal-installのバグとして報告されました。

于 2010-06-25T19:43:35.440 に答える
2

解決策は 2 つあります。どちらも多少危険ですが、インストールを機能させることができます。私にはある種のバグのように聞こえるので、Simon がこれに従ってくれてうれしいです。インストールを機能させるには、最初に次のことを試します。

ghc-pkg unregister random

次に ghc-pkg list random を実行して、何がインストールされているかを確認します。(確かではありませんが) まだ /Library/Frameworks バージョン (プラットフォームから) を持っていると思いますが、新しくインストールされたバージョンはなくなります。この場合は、次の手順に進みます。そうでない場合は、おそらくプラットフォームをクリーンに再インストールする必要があります。

プラットフォームの乱数がまだ存在すると仮定して、次のようにします。

cabal unpack random

アンパック先のディレクトリに cd し、バージョンを 1.0.0.2.1 に上げて .cabal ファイルを編集します (別のフィールドを追加して 1 ずつ増やします)。次に、そのディレクトリから cabal をインストールすると、新しいランダムがインストールされます。これはプラットフォームのランダムとはバージョンが異なるため、2 つを安全に共存させることができます。

ghc-pkg unregister を実行する代わりに、登録ファイルを直接削除できます。

/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d

ファイル名にはハッシュが追加されるため、実際に値を取得するにはディレクトリの内容を確認する必要があります。ファイルを削除するだけで、それ以降 ghc-pkg と cabal はそれを認識しなくなります。これはプラットフォームのインストールには影響しませんが (その意味ではより安全です)、インストールされている他のパッケージをホースする可能性はまだあります。この後、上記のようにバージョンを解凍してインクリメントすることで、ランダム パッケージを再インストールできます。

于 2010-06-25T21:14:21.213 に答える
2

これまでのところうまくいった回避策について説明します。私はさまざまなことを試しましたが、ここではうまくいった試みについてのみ説明します。

(ところで: 私は Mac OS X 10.6.4 を使用していますが、システムによって結果が異なる場合があります)

  • ソースから GHC 6.12.3 をインストールしました。GHC のビルドに必要なため、以前の GHC を削除しないでください。
  • Haskell Platform 2010.1.0.1インストーラーからのものであった以前のGHCへのシンボリックリンク/usr/bin( ghc、、、および)ghciを削除しました。ghc-pkgrunhaskell
  • そのスクリプトcabal-installを使用してインストールしました。bootstrap.sh
  • randomおよびhaskell98パッケージのパッチを適用したバージョンをインストールしました。違いは.cabalファイル にあるだけです
    • のバージョンrandomを に上げ、 への1.0.0.2.1依存関係を に変更しましtimetime == 1.1.*
    • のバージョンhaskell98を上げて1.0.1.1.1、それだけです
  • 実行cabal updatecabal 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 installhlintからyesod、セットアップが「安定した状態」に達し、それらのいずれも再インストールされないまで、前のリストを何度も編集しました。haddockHDBC-mysqlhakyllcabal installcabal install

  • 私が取り組んでいる自分のプログラムがコンパイルされて動作することを確認しました。今はすべて問題ないようです

ノート:

  • Haskell Platform 2010.1.0.1 を動作させることができませんでした。私が GHC 6.12.3 にアップグレードした後にのみ、問題が解決しました。皮肉なことに (?)、これは GHC のダウンロード ページの推奨事項に反します。

止まる!

ほとんどのユーザーには、GHC の代わりに Haskell Platform をインストールすることをお勧めします。現在の Haskell Platform リリースには、最近の GHC リリース、その他のツール (cabal など)、および連携して動作することが知られているより大きなライブラリ セットが含まれています。

  • この回避策は、将来的にも機能しなくなる可能性があります。これはおそらく数か月以内に起こると思います。のようなコア ライブラリrandomが更新され、依存関係の問題が再び解明され始めます。それから私/あなたは私たちのセットアップを修正するために時間を費やさなければなりません. おそらく、新しい GHC へのアップグレードが必要になるでしょう。しかし、依存関係の問題を解決するためにハックパッケージが更新されると、安定するのは古いリリースになるかもしれません。あなたへのサービスとして、私は時が来たらこの質問と回答を更新します. (他の人もこの問題を抱えていると仮定します。これまでのところ、Simon Marlow と Peaker もこの問題に直面していることを確認しました)

  • Haskell のセットアップが壊れていることを知る方法 (これらのいずれかに該当する場合、セットアップが壊れています):

    • 何も機能しません
    • ghc-pkg check壊れていると言う
    • 上記のこの回答にソースを入れた短いプログラムは、まったく同じバージョンのパッケージが2回インストールされていることを発見しました
    • cabal updateそして、cabal install上で書いたパッケージのリスト、または別のリスト (できれば多くの依存関係を持つ大きなもの) を繰り返します。安定した状態に到達しない場合 (サイクルの反復により常に何かが再インストールされる)、セットアップが壊れています。警告: この手順により、現在機能している Haskell のセットアップが破壊される可能性があります。マゾ好奇心がある場合、またはセットアップが壊れた後にセットアップを修正する意思がある場合は、これを行ってください (このプロセスには時間がかかる可能性があります)。
  • セットアップが壊れているか、機能しているかどうかを知りたいです。これは私を助けることができます。たとえば、GHC 6.10 のセットアップが正常に動作していることがわかった場合、I/U は Haskell などを試してみることを誰かに勧める機会に、それらのセットアップを人々に勧めることができます。

これが、同じまたは同様の問題に直面している他の人に役立つことを願っています。サイモン・マーロウとジョンに感謝!

于 2010-06-26T12:01:19.020 に答える