找不到持久模块
Posted
技术标签:
【中文标题】找不到持久模块【英文标题】:Persistent modules not found 【发布时间】:2013-12-19 13:16:02 【问题描述】:我正在尝试使用http://hackage.haskell.org/package/persistent-1.2.3.0,但是通过“cabal install persistent”安装它后,ghc 找不到它的暴露模块:
Prelude> import Database.Persist.Types
<no location info>:
Could not find module `Database.Persist.Types'
It is not a module in the current program, or in any known package.
而且 ghc-pkg 工作正常:
$ ghc-pkg find-module Database.Persist.Types
/var/lib/ghc/package.conf.d
/home/apsk/.ghc/x86_64-linux-7.6.3/package.conf.d
persistent-1.2.3.0
我是否遗漏了什么,或者这只是 cabal/persistent/ghc 的错误?顺便说一句,我的 ghc 是 7.6.3。
另外,我试过没有效果:“ghc-pkg recache”; “ghc-pkg 检查”;安装以前的版本;使用和不使用“sudo”和/或“--global”重新安装。
【问题讨论】:
【参考方案1】:检查您没有使用沙箱、cabal-dev、hsenv 或任何其他可能影响 ghc 查找依赖项的东西。确保你使用的是 ghc/ghci,而不是任何包装器,并且 ghc/ghci 没有别名为你的 shell 中的任何东西。
尝试明确指定 package-db:
ghci -package-db /home/apsk/.ghc/x86_64-linux-7.6.3/package.conf.d
如果您使用-v
启动 ghci,它会打印它查看的数据库(缓存),如下所示:
% ghci -v
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Glasgow Haskell Compiler, Version 7.6.3, stage 2 booted by GHC version 7.4.2
Using binary package database: /opt/ghc763/lib/ghc-7.6.3/package.conf.d/package.cache
Using binary package database: /home/feuerbach/.ghc/i386-linux-7.6.3/package.conf.d/package.cache
确保那里列出了具有持久性的数据库。
【讨论】:
谢谢,问题出在多个阴谋集团。【参考方案2】:希望对某人有所帮助。使用ghci -v
,我查看了是否有持久性,并看到了这个:
package persistent-2.0.8-cec952b1a61645f47dbec3b0b0cbcef4 is unusable due to missing or recursive dependencies: aeson-0.8.0.0-1bd8b5254a1dd30c0fe6acc346ad7de7 attoparsec-0.12.1.2-48393fcdbcf426085b696dc4409d9270 conduit-1.2.0.2-39f9cd0430ed7b7f4306899cbeb1ed83 monad-logger-0.3.7.2-3e6a80e9b3adf31497ff04514bdf2919 resource-pool-0.2.3.0-c02186641e7173f72887d5e65a646ac1 scientific-0.3.3.1-13e0eefbd7215e4503420c3d0a6fdb82 unordered-containers-0.2.5.0-147c3bb8f4a2da7d753455e75af30b92
所以我环顾四周(看到这个:Haskell Cabal: Mysterious missing or recursive dependencies),但没有找到一个很好的答案。我确实找到了一个不错的here:
$
ghc-pkg list Cabal
这表明我有 2 个该死的阴谋集团!一个在用户中,一个在全局中。啊。所以我能够做ghc-pkg unregister --user Cabal-1.18.1.3 --force
来摆脱旧的。然后cabal install cabal
自动进入 1.20,隐式进入用户,没有任何标志(替代为 --global
)。
【讨论】:
【参考方案3】:这个问题只出现在 GHCi 中,对吧?安装persistent
后是否重启过 GHCi? (也许还有另一种方法可以让 GHCi 获取新安装的软件包,但我不知道。
【讨论】:
不,问题会影响 ghc 和 ghci(即使在重新启动后)。以上是关于找不到持久模块的主要内容,如果未能解决你的问题,请参考以下文章