相依性地狱

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

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

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

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

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

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

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

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

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

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

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

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

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

相关

  • 色诺芬色诺芬(Ξενοφών,前427年-前355年)雅典人。军事家,文史学家。他以记录当时的希腊历史、苏格拉底语录而著称。色诺芬的出生日期不详。考古学者认为,公元前431年他出生于雅典
  • 脸(“脸”通“面”、脸又称脸孔、脸庞、颜脸)是人类和动物的多种感觉器官的集合。脸通常位于头部的正面,而且通常只有一个。脸的范围约为额至颔。包括额、眉、睫毛、眼、鼻、耳
  • 缺氧 (游戏)《缺氧》(英语:Oxygen Not Included)是一款透过Steam网络平台发行由Klei Entertainment制作的太空模拟策略游戏,采用2D横版布局,玩家需要管理复制人,让他们挖掘、建立并维护起一个
  • 乙太以太(英语:Luminiferous aether、aether 或 ether)或译为光以太,是古希腊哲学家亚里士多德所设想的一种物质,为五元素之一。19世纪的物理学家,认为它是一种曾被假想的电磁波的传播
  • norepinephrine去甲肾上腺素(INN名称:Norepinephrine、nor-epinephrine,也称Noradrenaline、nor-adrenaline--,缩写NE或NA),旧称正肾上腺素,学名1-(3,4-二羟苯基)-2-氨基乙醇,是肾上腺素去掉 N-甲
  • 氧化铬 (消歧义)氧化铬是铬和氧组成的二元化合物。氧化铬可以指:
  • 托米斯拉夫二世托米斯拉夫二世(Tomislav II.,1900年3月9日-1948年1月29日),原名艾蒙内·罗伯托·玛尔格利塔·玛利亚·朱塞佩·迪·托林诺·迪·萨伏依(Aimone Roberto Margherita Maria Giusepp
  • 丹尼斯·霍珀丹尼斯·霍珀(Dennis Hopper,1936年5月17日-2010年5月29日),美国演员及电影制作人,因1969年的经典电影《逍遥骑士》()而知名。霍颇1950年代在影片《无因的反抗》(Rebel Without a Ca
  • 对羟基汞苯甲酸对羟基汞苯甲酸(英语:-hydroxymercuribenzoic acid,缩写为“pHMB”)也称为“对羟基汞基苯甲酸”,是一种巯基试剂,它可与半胱氨酸的巯基反应,从而达到分开两个半胱氨酸残基的目的。
  • 超级质子同步加速器超级质子同步加速器(Super Proton Synchrotron,缩写:SPS)是欧洲核子研究组织的粒子加速器之一。它被容纳在一个环形隧道中,有6.9千米(4.3英里)的周长,在瑞士日内瓦附近并横跨法国-瑞