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自己像正常的图书馆那样做自己的工作?
我启用了library-profiling: True
~/.cabal/config
文件library-profiling: True
在我的~/.cabal/config
文件中为library-profiling: True
。 从那时起,任何新的安装将自动启用分析。
不幸的是,这仍然意味着我必须手动重新安装已安装的旧包。 虽然,经过一段时间手动这样做,我现在已经大多数包与分析启用重新安装…
从汤姆Lokhorst评论:
我希望有人会有更好的答案,下一次不需要手动重新安装完整的Haskell平台。
对于未来的访客:
安装所有已安装库的分析版本的任务已经变得不那么繁琐了, cabal (cabal-install)
现在跟踪使用它在.cabal
目录中的world
文件中安装的.cabal
(在Linux上,这将是$HOME/.cabal
,在Windows上就像C:\Users\%YOU%\AppData\Roaming\cabal\
,在OSX上)。
因此,在config
文件(在同一个目录中)启用分析后,并清除GHC的软件包数据库(您可以在ghc-pkg list nonexisting
find全局数据库和用户数据库的ghc-pkg list nonexisting
;从全局数据库中删除cabal-installed软件包ghc-pkg unregister packagename
如果有的话),重命名或删除整个用户数据库 – 这是必要的,因为world
文件只跟踪显式安装的软件包,而不是它们的依赖项)
$ cabal install --reinstall world --dry-run
首先运行--dry-run
在实际重新安装任何东西前检查是否有问题。 如果它将重新安装启动包,如process
或directory
,这是一个坏的迹象,如果你不知道如何处理它,请在#haskell
IRC频道,其中一个邮件列表,或在这里的指导。 如果由于新版本的某些软件包互相不兼容而无法find一致的安装计划,通常可以通过编辑world
文件和限制某些软件包的允许版本来解决。
那么,如果你乐观的认为什么都不会坏的,
$ cabal install --reinstall world
在GHC忙于编译的时候,还有一壶好茶。
Daniel Fischer的回答看起来不错,但由于某种原因,我的〜/ .cabal / world库只包含直接安装库的条目,而不包含它们的依赖关系。
相反,我倒出了所有使用安装的库列表
$ ghc-pkg list > list
这列出了系统和本地安装的库。 因此,我编辑了list
文件以删除第一部分(包含系统范围安装的库),只留下/home/<user>/.ghc/...
。 最后,我跑了
$ cabal install --reinstall $(cat list)
这对我有效。 你也许应该先--dry-run
。 然后去泡一壶茶。 或烤一块蛋糕。
看起来现在没有办法了: 票#282 – 分析版本的库pipe理不好 “像往常一样,问题是缺乏实现所有这些我们都想要的所有这些好function的开发时间。
对于访客2016+:只需安装ghc-prof
Debian Linux系统:
sudo apt-get install ghc-prof
Arch Linux系统:
sudo pacman -S ghc-prof