相依性地狱

✍ dations ◷ 2025-10-30 06:29:12 #反模式,软件包管理系统,版本控制系统,计算机错误

相依性地狱(英语:dependency hell),又称依赖地狱,是指在操作系统中由于软件之间的依赖性不能被满足而引发的问题。

一个软件包依赖于其它必要的软件包(且版本要符合要求),使得软件包系统形成了复杂的依赖关系网络,并可能引发一系列问题。一些软件包可能因为依赖性无法满足,需要安装大量软件包;另一方面,一个软件包的卸载可能引发数量众多的软件包无法工作。

目前,GNU/Linux通过高级软件包管理机制,一定程度上解决了相依性地狱问题。较著名的有Debian阵营的APT和Redhat阵营的Yum,及 Yum 的后继包管理工具 DNF。

相较“另起炉灶”的做法,现代软件往往会利用一些已有的组件(如库、程序、多媒体文件)进行开发。这些组件可能是某个软件,也可能是专门为其他软件使用而设计(库)。程序开发者根据特定版本的组件来设计自己的软件。这种方式减少了开发的工作量,使得程序比较轻便。但是该软件要正确运行,必须安装了指定版本的某些组件。

做一个比喻:你在建造一所房子,而并不生产门窗。由于门洞和窗口的尺寸要和门窗配合,因此你不得不寻找了一家门窗厂商,以他们生产的门窗作为标准,来建造合适的房子。你建造的房屋必须依赖于这家门窗厂商所生产的特定型号的门。

这便是相依性的产生过程。

若只有简单的相依性,则比较容易解决。如A软件依赖e、z软件包,而e、z软件包没有依赖,只需要安装e、z软件包,再安装A软件即可。就如建造商与门窗商的依赖关系,简单明了。

而当依赖性过多,且具有多级结构,形成错综复杂的网络,依赖性的解析就会变得异常困难,甚至出现无法解析的致命错误。

一个软件包可能依赖于众多的库,因此安装一个软件包的同时要安装几个甚至几十个库包。

指从所需软件包到最底层软件包之间的层级数过多。这会导致依赖性解析过于复杂,并且容易产生依赖冲突和环形依赖。

即两个软件包无法共存的情况。除两个软件包包含内容直接冲突外,也可能因为其依赖的低层软件包互相冲突。因此,两个看似毫无关联的软件包也可能因为依赖性冲突而无法安装。

即依赖性关系形成一个闭合环路,最终导致:在安装A软件包之前,必须要安装A、B、C、D软件包,然而这是不可能的。

相关

  • 海浪波浪、波涛是发生在各种水体(海水上的又叫海浪)表面上的表面波,即沿着水与空气界面间传行的一种波动,属于重力波的一种类型。当风吹起时,风所带来的压力及摩擦力对海洋表面的平衡
  • 布留洛夫卡尔·巴甫洛维奇·布留洛夫(俄语:Карл Па́влович Брюлло́в;1799年12月12日-1852年6月11日)是俄国著名画家,俄国19世纪上半期学院派的代表大师,新古典主义至
  • 铁路局机务段员工连栋宿舍铁路局机务段员工连栋宿舍,为建于日治时期的“铁道共济组合住宅”,属于“上埤头朱厝仑铁道部官舍”的一部分,位于台北市中山区。战后作为台湾铁路管理局基层的员工宿舍,住户多为
  • 澳大利亚-美国关系澳大利亚-美国关系是指澳大利亚与美国的国际关系。 澳大利亚是传统“国际联盟”:英联邦成员中的大国;但自1942年以来,由于第二次世界大战的关系,英国在太平洋地区的影响力逐渐下
  • 挹娄挹娄,东汉至北魏前定居今天中国东北地区的通古斯民族。两汉时期他们是继肃慎后生活在今天中国东北地区的民族,东汉以来他们是夫余臣民,扶余对他们课以重税,魏黄初三年叛。扶余多
  • 会计科目表财务会计 · 管理会计 · 会计科目表为会计学相当重要的基本研究方法与辅助工作,它将会计要素视性质分属、分纲的设置,例如现金即为资产会计要素的一大会计科目表。一般来说
  • 马克·斯皮茨马克·安德鲁·斯皮茨(英语:Mark Andrew Spitz,1950年2月10日-),生于美国加利福尼亚州,犹太人,美国前男子游泳运动员,世界体育史上最优秀的美国传奇之一,游泳史上表现辉煌的男子选手之
  • 本诺·欧内索格本诺·欧内索格(Benno Ohnesorg,1940年10月15日-1967年6月2日)是一名德国大学生,于1967年6月2日在柏林德意志歌剧院进行反对伊朗国王穆罕默德·礼萨·巴列维访问德国的示威活动时
  • 三甲基氯化锡三甲基氯化锡是一种有机锡化合物,化学式为(CH3)3SnCl。它是一种具有不愉快气味的白色固体,易水解,高毒。三甲基氯化锡可以通过四甲基锡与四氯化锡的重分配反应(英语:Redistributi
  • 杠杆收购杠杆收购(英语:Leveraged Buyout,又作LBO)是一种收购的方式,其本质即是举债收购,指收购者仅有少许资金,借由举债借入资金来收购其他资本较大的公司,有如运用杠杆原理以较小的力量抬