找不到持久模块

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(即使在重新启动后)。

以上是关于找不到持久模块的主要内容,如果未能解决你的问题,请参考以下文章

“找不到名称为 'product' 的持久性单元”

颤振:“致命错误:找不到模块'位置'”Xcode找不到模块

windows找不到指定模块怎么办?

matlab安装,找不到指定模块,程序

找不到指定模块

解决找不到pip模块的问题