我已经使用了 Haskell 程序的 cabal 包管理器来安装我从一些存储库克隆的库和新项目。我经常遇到问题。大多数项目使安装它们看起来非常容易,但在我的情况下并非总是如此 - 有时它们很难运行。事实上,有些太难了,以至于我对这个项目失去了兴趣,仅仅是因为无法安装它。
因此,与其抱怨,不如问我应该做些什么来改善这种情况。我想以我最近的问题为例。
我有兴趣尝试Gitit 项目。这是一个很有前途的个人维基,可以在各种版本控制系统上运行。
所以这就是我所做的:
cabal install在项目目录中运行,就像我在项目安装页面上所说的那样:
mika@eka:~/git/gitit$ ls
BLUETRIP-LICENSE CHANGES HCAR-gitit.tex LICENSE Network README.markdown RELANN-0.6.1 Setup.lhs TANGOICONS YUI-LICENSE data expireGititCache.hs gitit.cabal gitit.hs plugins
mika@eka:~/git/gitit$ cabal install
Resolving dependencies...
cabal: cannot configure happstack-server-7.0.7. It requires base64-bytestring
==1.0.*
For the dependency on base64-bytestring ==1.0.* there are these packages:
base64-bytestring-1.0.0.0. However none of them are available.
base64-bytestring-1.0.0.0 was excluded because gitit-0.10 requires
base64-bytestring ==0.1.*
mika@eka:~/git/gitit$
Run Code Online (Sandbox Code Playgroud)所以现在我在想:好吧,我会自己安装 happstack-server,也许这会奏效:
mika@eka:~/git/gitit$ cabal install happstack-server
Resolving dependencies...
Warning: happstack-server.cabal: Ignoring unknown section type: test-suite
Configuring happstack-server-7.0.7...
cabal: At least the following dependencies are missing:
blaze-html ==0.5.*,
hslogger >=1.0.2,
monad-control ==0.3.*,
network >=2.2.3,
sendfile >=0.7.1 && <0.8,
system-filepath >=0.3.1,
text >=0.10 && <0.12,
threads >=0.5,
transformers-base ==0.4.*
cabal: Error: some packages failed to install:
happstack-server-7.0.7 failed during the configure step. The exception was:
ExitFailure 1
Run Code Online (Sandbox Code Playgroud)所以看起来缺少一些依赖项。但是,安装这些依赖项难道不是首先使用 cabal 的全部意义吗?
我该怎么办?提交错误报告(到哪个项目?),手动安装依赖项还是其他什么?解释导致此类问题的原因的奖励积分。
对于任何偶然发现这一点的人,我发现了两件重要的事情,可以让阴谋集团的痛苦减少。
首先,从 cabal-install 1.18 开始内置沙箱(您不再需要 cabal-dev)。您应该使用 升级cabal install cabal-install,并将它们用于所有事情!我~/.cabal/sandboxes为每个构建创建并放置一个沙箱。然后,我完成的二进制文件链接到~/.cabal/bin同ln。
其次,如果您的发行版(例如 Debian)没有授予/tmp执行权限,它将导致各种看似无关的错误。之类的东西configure: error: cannot run C compiled programs。很容易修复alias cabal="TMPDIR=/somewhere/with/permission cabal"。
小智 5
具有复杂依赖关系的项目——以及那些包含 Web 服务器的项目很可能适合此类——通常最好使用cabal-dev而不是 cabal构建。前者将所有内容安装在沙箱中,并且不会干扰其他安装。
所以你应该首先安装一个新的Haskell Platform,然后 fork 存储库,最后使用 cabal-dev 构建。当然,cabal-dev install gitit如果你不想在源代码上工作,你可以安装 gitit 。
您应该避免复杂项目的全局安装。
| 归档时间: |
|
| 查看次数: |
3654 次 |
| 最近记录: |