阴谋集团的依赖地狱。真是个地狱

问题描述 投票:7回答:2

不同的编程语言使用不同的打包系统。

[Java的Maven用它们的多种方式,对我来说似乎是最好的选择,因为它在单独版本化的文件夹中维护了不同版本的jar文件,因此,没有办法最终导致库版本冲突。

接下来是python。 Python的pip将其程序包放入/usr/local/lib/python/dist-packages/site-packages。如果存在版本冲突,则可以使用其virtualenv并使用它。

Nodejs支持在本地文件夹和全局文件夹中安装软件包。到我为止,我在全局库中从未发生过依赖冲突。

然后,我对haskell的风格着迷,并开始使用cabal。首先,我正在/home/user1/.cabal中安装我的库。然后,当打包系统崩溃时,一个朋友建议我删除两个文件夹-/home/user1/.cabal && /home/user1/.ghc。现在,我的第一个困惑出现了,为什么cabal的库文件位于两个文件夹.cabal && .ghc中。我从~/.ghc and ~/.cabal的程序包源中清除了库文件夹cabal install,并执行了cabal-db-0.1.12。现在,出现了一个新错误,我感到很惊讶,因为我已经清理了所有本地存储库。错误是,

Configuring Cabal-1.22.2.0...
Building Cabal-1.22.2.0...
Installed Cabal-1.22.2.0
cabal: Error: some packages failed to install:
ansi-terminal-0.6.2.1 failed during the configure step. The exception was:
user error (The package 'ansi-terminal' requires Cabal library version -any &&
>=1.6 but no suitable version is installed.)

然后我尝试了最安全的选择-sandbox设为cabal-db。有效。然后,我对另一个包装(ghc-pkg-autofix)重复进行沙箱测试。我做到了,

cd ghc-pkg-autofix-0.2.0.1
cabal sandbox init
cabal install

对于绝对没有外部依赖项的沙箱,又有错误,

cabal: Could not resolve dependencies:
trying: ghc-pkg-autofix-0.2.0.1 (user goal)
trying: Cabal-1.22.2.0 (dependency of ghc-pkg-autofix-0.2.0.1)
next goal: process (dependency of ghc-pkg-autofix-0.2.0.1)
rejecting: process-1.2.0.0/installed-06c..., 1.2.3.0, 1.2.2.0, 1.2.1.0,
1.2.0.0, 1.1.0.2, 1.1.0.1, 1.1.0.0 (conflict: ghc-pkg-autofix => process>=1.0
&& <1.1)
rejecting: process-1.0.1.5, 1.0.1.4, 1.0.1.3, 1.0.1.2, 1.0.1.1, 1.0.0.0
(conflict: Cabal => process>=1.1.0.1 && <1.3)
Dependency tree exhaustively searched.

Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.

我是不是做错了(或者)这种依赖性冲突在阴谋集团中很常见?我知道,使用其他语言来管理依赖关系要简单得多。

注意:我使用cabal-install version 1.22.0.0 && The Glorious Glasgow Haskell Compilation System, version 7.8.4

haskell cabal
2个回答
5
投票

“对于绝对没有外部依赖项的沙箱,”这是不正确的。沙箱仍然依赖于全局包数据库。诸如Cabal,GHC之类的过程通常安装在全局软件包数据库中。在这里您要安装ghc-pkg-autofix,它需要进程1.0,但是您已经安装了更新版本的进程。您确定需要ghc-pkg-autofix,它似乎已经很旧了。


0
投票

也许您可以尝试依赖性诊断网站,例如http://www.watchman-pypi.com/dependency_analysis。这可以帮助诊断依赖项冲突问题,并自动显示完整的依赖树和下游项目的依赖树。

最佳,新石器时代

© www.soinside.com 2019 - 2024. All rights reserved.