不同的编程语言使用不同的打包系统。
[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
“对于绝对没有外部依赖项的沙箱,”这是不正确的。沙箱仍然依赖于全局包数据库。诸如Cabal,GHC之类的过程通常安装在全局软件包数据库中。在这里您要安装ghc-pkg-autofix,它需要进程1.0,但是您已经安装了更新版本的进程。您确定需要ghc-pkg-autofix,它似乎已经很旧了。
也许您可以尝试依赖性诊断网站,例如http://www.watchman-pypi.com/dependency_analysis。这可以帮助诊断依赖项冲突问题,并自动显示完整的依赖树和下游项目的依赖树。
最佳,新石器时代