不同的编程语言使用不同的打包系统。
在他们多样化的方法中,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
。有效。然后我重复沙盒换另一个pacakge,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中很常见?我知道,用其他语言管理依赖关系要简单得多。
注意:我使用cabal-install version 1.22.0.0
&amp;&amp; The Glorious Glasgow Haskell Compilation System, version 7.8.4
答案 0 :(得分:5)
&#34;对于沙箱,绝对没有外部依赖关系&#34;这不是真的。沙箱仍然依赖于全局包数据库。像Cabal,GHC,进程这样的东西通常安装在全局包数据库中。在这里,您要安装需要进程1.0的ghc-pkg-autofix,但您已安装了更新版本的进程。你确定你需要ghc-pkg-autofix,它似乎已经很老了。