4333


Hackage からライブラリを cabal でインストールする際にコンパイル時間がかかります。例えば
[wreq](http://www.serpentine.com/wreq/doc/wreq-0.1.0.0/html/ "wreq")
というライブラリをインストールしようとしたところ、依存するライブラリのインストールまで含めて、手元の環境では10分程度かかりました。

依存関係の衝突が怖いため cabal sandbox 内にインストールしています。

バイナリ配布など、ライブラリのインストールを高速化する手段はあるでしょうか？


CC BY-SA 3.0
2015-01-08T11:30:30.670
4295
2015-01-09T07:52:45.490
2015-01-08T11:52:49.030
455
455
question
haskell
Hackage のライブラリを高速にインストールする方法は？


`cabal install` には並列処理を行うオプションがあります。

[code]

    -j --jobs[=NUM]  Run NUM jobs simultaneously.
    
[/code]

確認はしていませんが、おそらくバックエンドで利用している make
コマンドにそのまま渡されるオプションかと思われます。ただ、並列に処理を行っても問題のない部分(依存関係のない)のみで行われますので、どの程度高速化が図れるのかはインストールするパッケージ次第となりそうです。なお、既にご存知かもしれませんが、オプションに指定する数値
`NUM` はお使いのシステムの総コア数以下にしておくと良いかと思います。

その他、以下のオプションを指定すれば、あるいは時間の節約になるかもしれません。

[code]

    --disable-tests
    --disable-library-coverage
    --disable-benchmarks
    --disable-documentation
    
[/code]

詳しくは `cabal install -h` をご覧ください。


CC BY-SA 3.0
2015-01-08T12:55:26.460
4299
2015-01-08T12:55:26.460
4295
answer


cabalコマンドには[sandboxのパスを指定する機能](https://www.haskell.org/cabal/users-
guide/installing-packages.html#sandboxes-advanced-
usage)があるので、あらかじめ依存関係が壊れない組み合わせであるとわかっていれば、複数のプロジェクトでsandboxを共有することでコンパイル時間を減らせます。

使えるパッケージやバージョンは限られてしまいますが、[Stackage](http://www.stackage.org/)を使えばStackageのリリースごとにsandboxを作り、プロジェクトごとに適切なsandboxを指定することで、依存関係を壊すこと無くビルド済みのパッケージを共有できると思います。


CC BY-SA 3.0
2015-01-09T07:52:45.490
4333
2015-01-09T07:52:45.490
6121
4295
answer