我发现--avoid-reinstallsmake包构建在cabal失败的地方.到底是做什么的?不是cabal已经试图避免重新安装,或者不应该吗?
我尝试安装curl,像这样的haskell包:
cabal install curl
Run Code Online (Sandbox Code Playgroud)
相关错误是:
configure: error: curl libraries not found, so curl package cannot be built
Run Code Online (Sandbox Code Playgroud)
这些"卷曲图书馆"在哪里?我已经在计算机上卷曲了程序(Ubuntu 13.04盒子.)
我的cabal依赖项列为
base ==4.6.*, containers ==0.5.*, bytestring ==0.10.*, binary ==0.5.*, parsec ==3.1.*
Run Code Online (Sandbox Code Playgroud)
我做了,
cabal sandbox init
wget http://www.stackage.org/lts/cabal.config
cabal install --only-dependencies
Run Code Online (Sandbox Code Playgroud)
为了克服依赖冲突,我正在使用沙箱安装.但仍然,cabal正在谈论一些让我感到困惑的全球限制.
Cabal依赖树解析被搞砸了,
trying: parsec-3.1.8 (dependency of myproj-0.1.0.0)
next goal: mtl (dependency of parsec-3.1.8)
rejecting: mtl-2.2.1, 2.2.0.1, 2.2 (global constraint requires ==2.1.3.1)
trying: mtl-2.1.3.1
next goal: transformers (dependency of mtl-2.1.3.1)
rejecting: transformers-0.4.2.0, 0.4.1.0, 0.3.0.0, 0.2.2.1, 0.2.2.0, 0.2.1.0,
0.2.0.0, 0.1.4.0, 0.1.3.0, 0.1.1.0, 0.1.0.1, 0.1.0.0, 0.0.1.0, 0.0.0.0,
0.4.0.0 (global constraint requires installed instance)
Run Code Online (Sandbox Code Playgroud) 假设我正在cabal install A B C D ... --dry-run全新安装的 GHC 中运行(我刚刚更新了一个新版本)。我看到它想要引入的一些依赖项不是这些包的最新版本,例如:
utf8-string-0.3.8 (latest: 1)
cairo-0.12.5.3 (latest: 0.13.1.0)
glib-0.12.5.4 (latest: 0.13.1.0)
gio-0.12.5.3 (latest: 0.13.1.0)
pango-0.12.5.3 (latest: 0.13.1.0)
gtk-0.12.5.7 (latest: 0.13.6)
Run Code Online (Sandbox Code Playgroud)
现在,这通常是完全正常的(尤其是在最近发布了新版本的 GHC 之后)。我不在乎这里列出的特定软件包。但是当我看到这个时,我想快速检查一下为什么 cabal 无法使用这些软件包的最新版本。通常这意味着我要求它安装的其中一项内容尚未更新,并且仍然依赖于旧版本,有时我实际上并不需要安装它,而是不想让它拖动其他软件包的版本。
有时这些“不是最新版本”很旧,这通常意味着我要求的东西与最近的东西完全不兼容,但已经找到了使用具有非常松散约束的旧版本的解决方案。
我想要做的是找出我正在安装的哪些软件包导致了这种情况。通常我可以看到类似“哦,那些是一堆图形包,可能是 xmonad 或 taffybar 的原因”之类的内容,然后我会在 hackage 上查看最新版本的 xmonad 和 taffybar,看看它们对这些包的限制是什么。但是通常像这样的“明显的罪魁祸首”实际上对这些依赖项没有相关的约束,这意味着问题是其他一些包,它依赖于我要求的东西,并且也依赖于我不是的包获取最新版本的,在那包与 cabal 报告的包的最新版本不兼容。找到这样一个包(以及为什么我真正关心的是依赖于它)可能是一项棘手的任务!
是否有任何工具或技巧可以帮助回答这个问题?我知道http://packdeps.haskellers.com/上的依赖工具很有用,但似乎并没有完全按照我的意愿行事;我可以使用反向依赖列表从 cabal 想要过时版本的包开始并继续工作,直到找到我认可的东西,或者我可以一次查询依赖监视器中的单个包,然后向后工作,直到我找到一个不是最新的软件包。但似乎我问的问题应该更直接可以回答。
在构建Haskell程序和库时,我一直在使用沙箱.但偶尔,我会构建一个我想在系统范围内安装的程序.似乎没有一种简单的方法来获取一个内置在沙盒中并将其安装在沙箱之外的程序.
我有一个从 Hackage 安装的 Haskell 包,使用cabal并希望运行作为包一部分的测试套件,但从cabal文档中我不清楚如何执行此操作。
我试过了:
cabal install --reinstall --enable-tests --run-tests the-package
Run Code Online (Sandbox Code Playgroud)
及其各种组合和排列,但似乎没有运行测试:我没有收到有关测试运行的报告,也没有生成任何我知道测试应该产生的输出。
如何运行作为已安装cabal包或正在安装的包的一部分的测试?
我在(X)Ubuntu 15.10上使用Haskell版本7.8.4,同时安装了Cabal-Install 1.18 apt.我没有尝试在这台机器上手动安装任何与Haskell相关的东西.我设置了一个cabal沙箱,取出并安装了一个模块,ghc但却发现它似乎没有被捡起来.ghc -v似乎暗示我有两个版本的cabal库相互遮蔽.这是如何运作的?
我开始时是一个空目录 /tmp/haskell-example
然后我做了cabal sandbox init.
$ cabal sandbox init
Writing a default package environment file to
/tmp/haskell-example/cabal.sandbox.config
Creating a new sandbox at /tmp/haskell-example/.cabal-sandbox
Run Code Online (Sandbox Code Playgroud)
然后我安装,natural-numbers因为我想Data.Natural在程序中使用该模块.此操作成功.
$ cabal install natural-numbers
Resolving dependencies...
Notice: installing into a sandbox located at
/tmp/haskell-example/.cabal-sandbox
Configuring natural-numbers-0.1.2.0...
Building natural-numbers-0.1.2.0...
Installed natural-numbers-0.1.2.0
Run Code Online (Sandbox Code Playgroud)
我可以验证Data.Natural模块是否确实安装在cabal沙箱中.
$ ls /tmp/haskell-example/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/natural-numbers-0.1.2.0
Data
libHSnatural-numbers-0.1.2.0.a
libHSnatural-numbers-0.1.2.0-ghc7.8.4.so
$ ls /tmp/haskell-example/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/natural-numbers-0.1.2.0/Data
Natural.dyn_hi
Natural.hi
Run Code Online (Sandbox Code Playgroud)
然后我创建一个Main.hs导入Data.Natural但不使用它的简单文件.
module …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Windows 10上安装一个名为clanki的程序.在它的安装文档中,它说使用'cabal install clanki'.我下载了cabal,然后是ghc.现在我遇到了包的版本问题base.
$ cabal install clanki
Resolving dependencies...
cabal.exe: Could not resolve dependencies:
trying: clanki-1.2.7 (user goal)
next goal: base (dependency of clanki-1.2.7)
rejecting: base-4.9.0.0/installed-4.9... (conflict: clanki => base<=4.9.0)
rejecting: base-4.9.0.0, base-4.8.2.0, base-4.8.1.0, base-4.8.0.0,
base-4.7.0.2, base-4.7.0.1, base-4.7.0.0, base-4.6.0.1, base-4.6.0.0,
base-4.5.1.0, base-4.5.0.0, base-4.4.1.0, base-4.4.0.0, base-4.3.1.0,
base-4.3.0.0, base-4.2.0.2, base-4.2.0.1, base-4.2.0.0, base-4.1.0.0,
base-4.0.0.0, base-3.0.3.2, base-3.0.3.1 (constraint from non-upgradeable
package requires installed instance)
Dependency tree exhaustively searched.
Run Code Online (Sandbox Code Playgroud)
所以clanki要求基数大于4.9(堆栈比cabal更清楚),然后我想将基数降级到4.8.2.0.当我尝试时ghc-pkg unregister base,它不允许我.甚至没有--force:
$ ghc-pkg unregister base …Run Code Online (Sandbox Code Playgroud) 如果我在nix-shell它下面构建我的 Haskell 项目,则会出现关于缺少zlib.
如果我使用 nix-shell 构建项目,nix-shell -p zlib则该项目zlib会成功查看并构建。
如何将zlib包添加到shell.nix文件以便-p zlib不再需要传递?
注意:构建是使用 cabal v2-build
为了使用堆栈构建,我必须执行以下操作
这是我shell.nix目前的定义方式:
{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:
let
inherit (nixpkgs) pkgs;
f = { mkDerivation, base, directory, stdenv, text, turtle, zlib }:
mkDerivation {
pname = "haskell-editor-setup";
version = "0.1.0.0";
src = ./.;
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [ …Run Code Online (Sandbox Code Playgroud) 复制下面的任何命令是不明智的,不要执行它们.请查看Zeta的答案,了解我为什么接近这个错误.
我的沙盒似乎陷入了某些软件包的全局版本,而不是使用沙箱版本.我已经在SO上寻找答案,并且许多问题在没有具体说明的情况下得到解答,或者稍有不同,所以我似乎无法让我的设置运行.这就是我所拥有的:
1. Version of cabal is old:
$ cabal --v
cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library
Run Code Online (Sandbox Code Playgroud)
哦,亲爱的,这是旧的,不会运行沙盒.
2. Install cabal with cabal
$ cabal install cabal
Resolving dependencies...
Downloading Cabal-1.22.6.0...
...lots of stuf...
Registering Cabal-1.22.6.0...
Installed Cabal-1.22.6.0
Run Code Online (Sandbox Code Playgroud)
看起来不错.
3. Try it out:
$ cabal sandbox init
cabal: unrecognised command: sandbox (try --help)
Run Code Online (Sandbox Code Playgroud)
嗯.
$ which cabal
/usr/bin/cabal
Run Code Online (Sandbox Code Playgroud)
啊.
$ ${HOME}/.cabal/bin/cabal --version
cabal-install version 1.22.2.0
using version 1.22.2.0 of the Cabal library
Run Code Online (Sandbox Code Playgroud)
啊哈.
$ …Run Code Online (Sandbox Code Playgroud)