Cabal在需要分析库时不安装依赖项?

时间:2009-11-09 22:36:24

标签: haskell profiling cabal

我想用分析编译我的程序,所以我运行:

$ cabal configure --enable-executable-profiling
...
$ cabal build
...
    Could not find module 'Graphics.UI.GLUT':
      Perhaps you havent installed the profiling libraries for package 'GLUT-2.2.2.0'?
...
$ # indeed I have not installed the prof libs for GLUT, so..
$ cabal install -p GLUT --reinstall
...
    Could not find module 'Graphics.Rendering.OpenGL':
      Perhaps you havent installed the profiling libraries for package 'OpenGL-2.4.0.1'?
...

所以,问题是,与cabal通常的欢迎行为不同,cabal无法解析依赖关系并在需要分析库时安装它们。

我可以通过手动解析依赖项来解决这个问题(通过跟踪编译一段时间后出现的错误):

$ cabal install -p OpenGLRaw --reinstall
$ cabal install -p StateVar --reinstall
$ cabal install -p Tensor --reinstall
$ cabal install -p ObjectName --reinstall
$ cabal install -p GLURaw --reinstall
$ cabal install -p OpenGL --reinstall
$ cabal install -p GLUT --reinstall

然后重复我的下一个依赖..

有更好的方法吗?也就是说,让cabal独立完成工作,就像对普通图书馆一样吗?

5 个答案:

答案 0 :(得分:45)

我在library-profiling: True文件中启用了~/.cabal/config。从那时起,任何新安装都将自动启用分析。

不幸的是,这仍然意味着我必须手动重新安装已安装的旧软件包。虽然,经过一段时间的手动操作后,我现在重新安装了大多数软件包并启用了分析...

答案 1 :(得分:30)

Tom Lokhorst的评论:

  

我希望有人会得到一个更好的答案,一个不需要我下次手动重新安装完整的Haskell平台的答案。

对于未来的访客:

安装所有已安装库的性能分析版本的任务变得不那么繁琐,cabal (cabal-install)现在跟踪world目录中.cabal文件中使用它的安装内容(在Linux上,那将是$HOME/.cabal,在Windows上类似于C:\Users\%YOU%\AppData\Roaming\cabal\,在OSX上?)。

因此,在config文件(在同一目录中)中启用分析后,清除GHC的软件包数据库(您可以找到每ghc-pkg list nonexisting个全局和用户数据库的位置;删除cabal-使用ghc-pkg unregister packagename从全局数据库安装包,如果你有,重命名或删除整个用户数据库 - 这是必要的,因为world文件只跟踪显式安装的包,而不是它们的依赖关系),安装所有包分析支持应该如下工作:

$ cabal install --reinstall world --dry-run

首先运行--dry-run以在实际重新安装任何内容之前检查问题。如果它会重新安装processdirectory等启动软件包,那么这是一个不好的信号,如果您不知道如何处理它,请在#haskell IRC频道上询问其中一个邮件列表,或在这里作为指导。如果由于某些软件包的hackage上的新版本相互不兼容而无法找到一致的安装计划,通常可以通过编辑world文件并限制某些软件包的允许版本来解决

然后,如果你乐观地认为什么都不会破坏,

$ cabal install --reinstall world

并且在GHC忙于编制的时候喝了一大壶茶。

答案 2 :(得分:15)

Daniel Fischer的回答看起来不错,但出于某种原因,我的〜/ .cabal / world库只包含直接安装库的条目,而不包含它们的依赖项。

相反,我使用

转出了所有已安装库的列表
$ ghc-pkg list > list

这列出了系统范围和本地安装的库。因此,我编辑了list文件以删除第一部分(包含系统安装的库),只留下/home/<user>/.ghc/...之后的行。最后,我跑了

$ cabal install --reinstall $(cat list) 

这对我有用。你应该先做--dry-run。然后去煮一壶茶。或者烤蛋糕。

答案 3 :(得分:4)

答案 4 :(得分:0)

对于访客2016+:只需安装ghc-prof

即可
  

Debian Linux系统:

     

sudo apt-get install ghc-prof

     

Arch Linux Systems:

     

sudo pacman -S ghc-prof