簡體   English   中英

如何使Cabal沙箱了解其他位置的(已安裝)軟件包?

[英]how to make cabal sandbox aware of (installed) packages in other locations?

當我有一個沙箱時, cabal install似乎忽略了$HOME/.ghc/x86_64-linux-7.8.4/package.conf.d軟件包。

如何配置沙箱,使這些軟件包可見? 我在https://www.haskell.org/cabal/users-guide/installing-packages.html#sandboxes-advanced-usage中看到對--package-db=db的模糊引用,但我既不知道如何也不應該這樣做用它。 (使用沙箱init?configure?install?似乎沒有任何作用-也沒有給出任何錯誤消息。)

我知道add-source但是我的問題是關於已安裝的軟件包的。

沙盒的全部要點是它會忽略本地軟件包數據庫。

如果要跨多個沙箱共享安裝,則可以將其安裝到全局數據庫。 但是您應該非常小心,因為修復損壞的包裝的不良性要困難得多。 將其保存在真正的核心程序包中,您希望這些程序包可以在許多項目中得到廣泛共享-不僅僅是您現在正為工作而緊張的一半。

或者,您可以在多個軟件包的內部版本之間共享一個沙箱。 只需將CABAL_SANDBOX_CONFIG變量設置為指向相應cabal.sandbox.config文件的絕對路徑。 這樣可以更安全,更靈活,因為您可以選擇共享已安裝軟件包的范圍(在壞情況下,只需輕按沙箱並重新開始)。

您可以嘗試以下操作-將文件從〜/ .ghc / {arch-os-ghc-version} /package.conf.d復制(或符號鏈接)到沙盒的{arch-os-ghc-version} -packages中。 conf.d目錄。

關於package.cache文件存在問題。 以下過程似乎是一種安全的方法:

  1. 從一個空的沙箱開始
  2. 將package.conf.d文件從〜/ .ghc復制到沙箱(包括package.cache)
  3. 通過cabal install --only-dependencies將軟件包添加到沙箱

我不知道是否需要package.cache文件,或者是否有重建它的方法。

一個缺點是, cabal install --only-deps似乎會在沙箱中重新安裝損壞的軟件包,即使您的應用程序不需要它們也是如此。 也許有解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM