在Ubuntu中本地下载具有依赖项的软件包

前段时间,我们讨论了 如何在Ubuntu中离线安装软件。在该指南中,我们说明了如何在支持Internet的系统中下载软件包,以及如何在Internet连接速度慢或没有Internet连接的另一个系统中离线安装软件包。在本教程中,我们将看到如何在Ubuntu及其衍生版本中本地下载具有依赖项的软件包。

使用此方法,我们可以下载.DEB软件包以及所有必需的依赖项,而无需实际安装。这样,我们可以从一个系统下载软件包,然后将它们安装在同一系统本身或没有Internet连接的任何其他系统中。我们还可以下载用于不同体系结构系统的软件包。例如,可以从64位系统下载32位软件包,反之亦然。好吧,不用多说,让我们开始吧,好吗?

在Ubuntu中本地下载具有依赖项的软件包

我们可以用两种方法做到这一点。我在Ubuntu 16.04和18.04 LTS桌面版本上测试了本指南。我工作得很好。

方法1:

与下面提供的所有其他方法相比,这是最简单直接的方法。

要下载具有所有依赖项的软件包而不安装它们,只需运行:

$ sudo apt-get install --download-only 

例如,让我们下载 Vim 使用以下命令将所有必需的依赖项打包,而无需安装它们:

$ sudo apt-get install --download-only vim

样本输出:

Reading package lists... Done
Building dependency tree 
Reading state information... Done
Suggested packages:
ctags vim-doc vim-scripts
The following NEW packages will be installed:
vim
0 upgraded, 1 newly installed, 0 to remove and 82 not upgraded.
Need to get 1,152 kB of archives.
After this operation, 2,852 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 vim amd64 2:8.0.1453-1ubuntu1.1 [1,152 kB]
Fetched 1,152 kB in 3s (372 kB/s)
Download complete and in download only mode

如您在上面的输出中看到的,我们已经下载了Vim软件包,它将包含所有依赖项,但实际上并未安装它。

所有下载的文件将保存在 / var / cache / apt / archives 目录。

只需将整个缓存文件夹复制到任何USB上,或通过网络将它们传输到要在其中安装软件包的系统。

要安装下载的软件包,请转到缓存文件夹并按如下所示安装它们。

$ sudo dpkg -i *

看到?这比您想像的要容易,不是吗?是的!

但是,仅当您用于下载软件包的系统没有本地安装主软件包或其依赖项时,此方法才有效。

在这种情况下,请使用 “ apt-rdepends” 获取所有软件包。如果尚未安装apt-rdepends,请使用以下命令进行安装:

$ sudo apt install apt-rdepends

然后使用以下命令下载主软件包(在本例中为Vim)以及所有依赖项:

$ apt download $(apt-rdepends vim | grep -v "^ ")

该命令将递归下载所有必需的软件包。

万一遇到以下错误,以防万一:

E: Can't select candidate version from package debconf-2.0 as it has no candidate

请尝试以下命令:

$ apt-get download $(apt-rdepends vim | grep -v "^ " | sed 's/debconf-2.0/debconf/g')

该命令将下载Vim和所有需要的软件包,并将它们保存在当前工作目录中。

要安装所有下载的软件包,请运行:

$ sudo dpkg -i *

方法2:

首先,下载要下载的程序包的依赖项。

显示包的所有依赖项的列表,例如 蟒蛇, 跑:

$ sudo apt-cache depends python

样本输出:

python
PreDepends: python-minimal
Depends: python2.7
Depends: libpython-stdlib
Conflicts: 
Breaks: update-manager-core
Suggests: python-doc
Suggests: python-tk
Replaces: python-dev

让我们将python软件包及其依赖项下载到本地磁盘。

为此,首先创建一个目录来保存软件包。

$ mkdir python

进入目录:

$ cd python

然后运行:

$ for i in $(apt-cache depends python | grep -E 'Depends|Recommends|Suggests' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/); do sudo apt-get download $i 2>>errors.txt; done

上面的命令将下载Python软件包以及所有必需的依赖项,并将它们保存在当前工作目录中。此命令还将在 errors.txt 文件。

让我们使用“ ls”命令查看下载的文件:

$ ls

样本输出:

errors.txt
libpython-stdlib_2.7.11-1_amd64.deb
python2.7_2.7.11-7ubuntu1_amd64.deb
python-doc_2.7.11-1_all.deb
python-minimal_2.7.11-1_amd64.deb
python-tk_2.7.11-2_amd64.deb

在Ubuntu本地下载软件包

如您在上面的输出中看到的,python包及其所有依赖项均已下载。

只需将它们复制到USB驱动器,然后在任何离线系统上安装python软件包,如下所示。

安装USB驱动器,转到安装驱动器的位置,然后运行以下命令来安装Python。

$ sudo dpkg -i *

建议阅读:

  • 如何在CentOS中下载具有所有依赖项的RPM软件包

下载具有特定体系结构本地依赖关系的软件包

您可能会注意到上面的命令已经下载了64位软件包。这是因为我正在从64位Ubuntu系统下载它们。如果要下载32位Arch系统的软件包怎么办?这也是可能的。

首先,使用以下命令在Ubuntu系统中启用所需的体系结构:

$ sudo dpkg --add-architecture i386

如果您不添加架构,则在尝试下载软件包时会收到以下错误消息。

E: No packages found

启用您选择的体系结构后,运行以下命令以下载与特定体系结构相关的软件包。

$ for i in $(apt-cache depends python:i386 | grep -E 'Depends|Recommends|Suggests' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/); do sudo apt-get download $i 2>>errors.txt; done

如您在上面的输出中看到的,我已经添加了架构 ‘i386’“ apt-cache” 命令。

样本输出:

Get:1 http://in.archive.ubuntu.com/ubuntu xenial/main i386 python-minimal i386 2.7.11-1 [28.2 kB]
Fetched 28.2 kB in 1s (25.8 kB/s) 
Get:1 http://in.archive.ubuntu.com/ubuntu xenial/main i386 python2.7 i386 2.7.11-7ubuntu1 [220 kB]
Fetched 220 kB in 1s (116 kB/s) 
Get:1 http://in.archive.ubuntu.com/ubuntu xenial/main i386 libpython-stdlib i386 2.7.11-1 [7,664 B]
Fetched 7,664 B in 0s (13.3 kB/s) 
Get:1 http://in.archive.ubuntu.com/ubuntu xenial/main i386 python-tk i386 2.7.11-2 [28.0 kB]
Fetched 28.0 kB in 1s (24.8 kB/s)
在本地下载软件包 

让我们检查下载的软件包。

$ ls

样本输出:

errors.txt
libpython-stdlib_2.7.11-1_i386.deb
python2.7_2.7.11-7ubuntu1_i386.deb
python-minimal_2.7.11-1_i386.deb
python-tk_2.7.11-2_i386.deb

看到?上面的命令仅下载32位软件包。

推荐阅读:

  • 如何在不更改系统任何内容的情况下模拟Linux命令

您现在知道如何在Ubuntu系统中下载具有依赖项的软件包。此方法对于所有基于DEB的系统都是相同的。希望这可以帮助。

Sidebar