在 Unbuntu 系統(tǒng)上安裝各種軟件時,經(jīng)常會遇到各種各樣的依賴問題而導致安裝無法進行。我作為一枚 Linux 小白正深受其苦,經(jīng)常越弄越亂導致不得不重裝系統(tǒng)(哭)。通常來說,這類問題可以通過 更換下載源、apt-get update 和 apt-get upgrade 來解決。但更經(jīng)常會遇到連這三幻神(霧)都沒法解決問題的時候。這篇文章就來分享一下安裝 Deb 包遭遇依賴問題時到底應(yīng)該怎么做~
Deb 包安裝的正確姿勢
從網(wǎng)上下載 .deb 安裝包后,我們可以進入到 .deb 包的下載目錄,使用 dpkg 命令進行安裝。
$> sudo dpkg -i <package.deb>
- 以下是
dpkg的一些常用指令。
$> sudo dpkg -i <package.deb> #安裝包
$> sudo dpkg -r <package> #刪除包
$> sudo dpkg -P <package> #徹底刪除包(包括配置文件)
$> dpkg -l #列出當前已安裝的包
如果命令執(zhí)行成功,那就萬事大吉了。到此為止軟件就安裝好了,當然也不用繼續(xù)看下面的內(nèi)容了。
但是使用 dpkg 安裝時經(jīng)常會報錯,提示缺少依賴,導致安裝終止。這時我們可以使用 apt-get 指令修復(fù)依賴問題,它會自動安裝缺少的軟件包。
$> sudo apt-get -f install
執(zhí)行成功后,apt-get 就已經(jīng)為我們安裝好了要安裝的 .deb 包,不需要重新執(zhí)行 dpkg 命令了。
- 如果系統(tǒng)的
apt版本在1.1以上,可以直接使用apt進行安裝 .deb 包,而不需要dpkg。它可以自動為我們安裝需要的依賴。具體可以查看 apt1.1 發(fā)布說明。
$> apt -v
apt 1.8.2 (amd64)
$> sudo apt install ./<package.deb>
如果使用 apt 不能修復(fù)依賴問題,反而自動卸載了未安裝完成的 .deb 包;或者使用 apt install 安裝 .deb 包時提示類似以下內(nèi)容。
下列軟件包有為滿足的依賴關(guān)系:
* : 依賴:python3-apt 但是它將不會被安裝
E: 無法修正錯誤,因為您要求某些軟件包保持現(xiàn)狀,就是它們破壞了軟件包間的依賴關(guān)系。
導致這個錯誤的通常原因是,系統(tǒng)中已經(jīng)安裝過被依賴的包的高版本。例如在我安裝 vscode時,需要依賴 libpython3-stdlib 3.6.5;但是之前在安裝其它軟件時,系統(tǒng)中已經(jīng)安裝了 libpython3-stdlib 3.7.3,因此需要對包的版本進行降級。而 apt-get -f install 并不能勝任這個工作。
最簡單的方法是用 aptitude 代替 apt-get。 aptitude 和 apt-get 一樣,是 Debian 及其衍生系統(tǒng)中功能極其強大的包管理工具。首先下載 aptitude:
$> sudo apt-get install aptitude
- 如果下載
aptitude時也發(fā)生了依賴關(guān)系錯誤而導致無法下載,那你就自求多福吧。。。(不想手動調(diào)整依賴關(guān)系的話,就只能重裝系統(tǒng)了,痛苦)
下載好 aptitude 后,執(zhí)行以下命令修復(fù)依賴關(guān)系。(當然也是要在 dpkg 執(zhí)行之后)
$> sudo aptitude -f install
這時 aptitude 會對依賴關(guān)系進行智能處理。如果方案中仍然存在未解決的依賴,提示你刪除 .deb 軟件包。
刪除 下列軟件包
1) vs-code [1:1.0.0.66 (now)]
是否接受該方案? [Y/n/q/?]
這時需要輸入 n,讓 aptitude 重新計算可行方案,它會對已存在的包進行刪除、降級等操作。
總的來說,aptitude 在解決依賴關(guān)系問題上,比 apt 智能很多。因此,在遇到復(fù)雜的依賴問題的時候,都可以優(yōu)先考慮使用 aptitude 來解決。網(wǎng)上有很多 aptitude 的使用教程。關(guān)于 aptitude 的詳細內(nèi)容可以查閱官方的 aptitude 使用手冊。