在 Unbuntu 系統(tǒng)上安裝各種軟件時(shí),經(jīng)常會遇到各種各樣的依賴問題而導(dǎo)致安裝無法進(jìn)行则拷。我作為一枚 Linux 小白正深受其苦江场,經(jīng)常越弄越亂導(dǎo)致不得不重裝系統(tǒng)(哭)。通常來說嘲碱,這類問題可以通過 更換下載源
金砍、apt-get update
和 apt-get upgrade
來解決。但更經(jīng)常會遇到連這三幻神(霧)都沒法解決問題的時(shí)候麦锯。這篇文章就來分享一下安裝 Deb 包遭遇依賴問題時(shí)到底應(yīng)該怎么做~
Deb 包安裝的正確姿勢
從網(wǎng)上下載 .deb 安裝包后恕稠,我們可以進(jìn)入到 .deb 包的下載目錄,使用 dpkg
命令進(jìn)行安裝扶欣。
$> sudo dpkg -i <package.deb>
- 以下是
dpkg
的一些常用指令鹅巍。
$> sudo dpkg -i <package.deb> #安裝包
$> sudo dpkg -r <package> #刪除包
$> sudo dpkg -P <package> #徹底刪除包(包括配置文件)
$> dpkg -l #列出當(dāng)前已安裝的包
如果命令執(zhí)行成功千扶,那就萬事大吉了。到此為止軟件就安裝好了昆著,當(dāng)然也不用繼續(xù)看下面的內(nèi)容了县貌。
但是使用 dpkg
安裝時(shí)經(jīng)常會報(bào)錯(cuò),提示缺少依賴凑懂,導(dǎo)致安裝終止煤痕。這時(shí)我們可以使用 apt-get
指令修復(fù)依賴問題,它會自動安裝缺少的軟件包接谨。
$> sudo apt-get -f install
執(zhí)行成功后摆碉,apt-get
就已經(jīng)為我們安裝好了要安裝的 .deb 包,不需要重新執(zhí)行 dpkg
命令了脓豪。
- 如果系統(tǒng)的
apt
版本在1.1以上巷帝,可以直接使用apt
進(jìn)行安裝 .deb 包,而不需要dpkg
扫夜。它可以自動為我們安裝需要的依賴楞泼。具體可以查看 apt1.1 發(fā)布說明。
$> apt -v
apt 1.8.2 (amd64)
$> sudo apt install ./<package.deb>
如果使用 apt
不能修復(fù)依賴問題笤闯,反而自動卸載了未安裝完成的 .deb 包堕阔;或者使用 apt install
安裝 .deb 包時(shí)提示類似以下內(nèi)容。
下列軟件包有為滿足的依賴關(guān)系:
* : 依賴:python3-apt 但是它將不會被安裝
E: 無法修正錯(cuò)誤颗味,因?yàn)槟竽承┸浖3脂F(xiàn)狀超陆,就是它們破壞了軟件包間的依賴關(guān)系。
導(dǎo)致這個(gè)錯(cuò)誤的通常原因是浦马,系統(tǒng)中已經(jīng)安裝過被依賴的包的高版本时呀。例如在我安裝 vscode時(shí),需要依賴 libpython3-stdlib 3.6.5晶默;但是之前在安裝其它軟件時(shí)谨娜,系統(tǒng)中已經(jīng)安裝了 libpython3-stdlib 3.7.3,因此需要對包的版本進(jìn)行降級磺陡。而 apt-get -f install
并不能勝任這個(gè)工作瞧预。
最簡單的方法是用 aptitude
代替 apt-get
。 aptitude
和 apt-get
一樣仅政,是 Debian 及其衍生系統(tǒng)中功能極其強(qiáng)大的包管理工具。首先下載 aptitude
:
$> sudo apt-get install aptitude
- 如果下載
aptitude
時(shí)也發(fā)生了依賴關(guān)系錯(cuò)誤而導(dǎo)致無法下載盆驹,那你就自求多福吧圆丹。。躯喇。(不想手動調(diào)整依賴關(guān)系的話辫封,就只能重裝系統(tǒng)了硝枉,痛苦)
下載好 aptitude
后,執(zhí)行以下命令修復(fù)依賴關(guān)系倦微。(當(dāng)然也是要在 dpkg
執(zhí)行之后)
$> sudo aptitude -f install
這時(shí) aptitude
會對依賴關(guān)系進(jìn)行智能處理妻味。如果方案中仍然存在未解決的依賴,提示你刪除 .deb 軟件包欣福。
刪除 下列軟件包
1) vs-code [1:1.0.0.66 (now)]
是否接受該方案责球? [Y/n/q/?]
這時(shí)需要輸入 n,讓 aptitude
重新計(jì)算可行方案拓劝,它會對已存在的包進(jìn)行刪除雏逾、降級等操作。
總的來說郑临,aptitude
在解決依賴關(guān)系問題上栖博,比 apt
智能很多。因此厢洞,在遇到復(fù)雜的依賴問題的時(shí)候仇让,都可以優(yōu)先考慮使用 aptitude
來解決。網(wǎng)上有很多 aptitude
的使用教程躺翻。關(guān)于 aptitude
的詳細(xì)內(nèi)容可以查閱官方的 aptitude 使用手冊丧叽。