2015-07-21 80 views
0

有幾件事我很困惑,所以我會盡我所能地解釋它們中的每一個。Cabal-installed模塊不會導入

我一直在試圖安裝使用cabal的haskell的diagrams軟件包。 I've seen it suggested使用沙箱安裝包,所以這就是我所做的。我不清楚的東西正是沙盒 - 我知道我可以用cabal sandbox init初始化一個,然後用cabal install在其中安裝軟件包,但是我沒有看到安裝它們後如何使用這些軟件包。

我然後試圖編譯使用GHC一個測試腳本,這導致以下錯誤:

diagramstutorial.lhs:3:10: 
    Could not find module 'Diagrams.Prelude' 
    Use -v to see a list of the files searched for. 

隨着該腳本是應該加載另一個模塊類似的錯誤。這些模塊肯定都包含在圖表包中,而且cabal似乎很高興包裝已正確安裝。我期望有些簡單的東西我只是不明白,但我不知道它是什麼。

+0

你是怎樣嘗試使用GHC編譯測試腳本?你給了什麼命令?那時你在沙箱目錄裏面? – Sibi

+0

我和沙箱在同一個目錄下,並輸入'ghc --make diagramstutorial.lhs'來編譯它(這是文件的標題) –

+1

密切相關:[在沙箱中安裝了parsec,但找不到圖書館當試圖加載文件在ghci](http://stackoverflow.com/questions/23120611/installed-parsec-in-sandbox-but-cant-find-libraries-when-trying-to-load-file-i) – duplode

回答

2

I typed ghc --make diagramstutorial.lhs to compile it

這將使GHC使用常規用戶包數據庫(即不是沙箱之一)。改爲使用cabal exec -- ghc --make diagramstutorial.lhs,以便GHC在沙箱的上下文中運行。

您還可以在沙箱內使用GHCi,使用cabal repl。當然,如果/當你開始準備一個cabal包,所有的cabal命令(cabal build等)都會在你的目錄中使用這個沙箱。

Something that's not clear to me is exactly what a sandbox is

一組包含目錄的本地數據庫的軟件包。除了cabal.sandbox.config配置文件之外,還有一個隱藏目錄.cabal-sandbox,其中diagrams和你安裝的其他軟件包都在。

+0

這隻適用於Cabal 1.20及以上版本。對於舊版本,請參閱下面的我的回覆,這是一個全局解決方案,應該是首選。 – Arnon

+0

發生了一些令人困惑的事......昨天這個建議很好,但是現在我得到錯誤'cabal.exe:unrecognized command:exec(try --help)'。你知道可能發生了什麼嗎? –

+0

@DanielLittlewood'cabal --version'告訴你什麼?正如Arnon指出的,1.20版本中增加了cabal exec。今天你有可能使用較舊版本的cabal嗎?(這聽起來並不像聽起來那麼令人難以置信,因爲'cabal install cabal-install'將執行cabal程序的本地而非系統範圍的安裝。) – duplode

1
  1. 找到沙盒目錄,並找到packages.conf.d文件。 例如,/home/user/.cabal-sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d

  2. 重新運行GHC與package-db標誌命令:

    ghci -package-db /home/user/.cabal-sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d --make diagramstutorial.lhs

現在一切都應該工作