如何在 Ubuntu、Debian、Linux Mint、Pop OS 中本地下载具有依赖关系的软件包

前段时间,我们讨论过 如何在 Ubuntu 中离线安装软件. 在该指南中,我们解释了如何在支持 Internet 的系统中下载软件包,并将它们安装在另一个 Internet 连接速度较慢或没有 Internet 连接的系统中。 在本教程中,我们将了解如何在 Ubuntu、Debian、Pop OS 和其他基于 DEB 的系统中本地下载具有依赖项的软件包。

使用这种方法,我们可以下载一个 .deb 与所有必需的依赖项一起打包,而无需实际安装它。 这样,我们可以从一个系统下载软件包,然后将它们安装在同一系统本身或任何其他没有 Internet 连接的系统中。 我们还可以下载不同架构系统的包。 例如,可以从 64 位系统下载 32 位包,反之亦然。

内容

  1. 在 Ubuntu 中本地下载具有依赖项的软件包
    1. 方法一:
    2. 方法二:
  2. 在本地下载特定架构的依赖包

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

我们可以通过两种方法做到这一点。 我在 Ubuntu 16.04 和 18.04 LTS 桌面版上测试了本指南。 它工作得很好,如下所述。

方法一:

这是比下面给出的其他方法最简单直接的方法。

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

$ sudo apt-get install --download-only <package_name>

例如,让我们下载 维姆 包含所有必需依赖项的软件包,无需安装它们,使用命令:

$ 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 https://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 包将所有依赖项,但我们并没有实际安装它。

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

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

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

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

$ sudo dpkg -i *

看? 就是这么简单!

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

如果您尝试下载已安装在同一系统中的软件包,您将看到如下输出。

$ sudo apt-get install --download-only vim Reading package lists... Done Building dependency tree  Reading state information... Done vim is already the newest version (2:8.0.1453-1ubuntu1.3). 0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.

在这种情况下,使用 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 *

方法二:

首先,下载你要下载的包的依赖。

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

$ sudo apt-cache depends python

样本输出:

python PreDepends: python-minimal Depends: python2.7 Depends: libpython-stdlib Conflicts: <python-central> 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
列出下载的包

正如您在上面的输出中看到的,已经下载了包含所有依赖项的 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

正如您在上面的输出中看到的,我添加了架构 i386apt-cache 命令。

样本输出:

Get:1 https://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 https://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 https://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 https://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 位包。

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

相关阅读:

  • 如何在 Ubuntu 中下载软件包的递归依赖项
  • 如何在不更改系统任何内容的情况下模拟 Linux 命令

APTapt-cacheapt-getDebian在Ubuntu本地下载依赖包dpkgLinuxLinux基础Linux命令包管理Pop osUbuntu