使用“apt”和“pip”安装软件包之间的区别

ber*_*ert 17 apt pip python3

我一直在尝试安装依赖于setuptools的Python模块,显然该模块是使用apt安装的。然而,它似乎是错误的版本,所以我尝试使用pip安装它,只是为了看看是否有任何变化(剧透:显然没有任何变化)。

以下之间有什么区别(如果有)?

pip3 install setuptools
Run Code Online (Sandbox Code Playgroud)

和:

apt install python3-setuptools
Run Code Online (Sandbox Code Playgroud)

Mar*_*ler 21

\n

如果有人能解释以下之间的差异(如果有),我将不胜感激:

\n
\n

最高级别:当事情可能与您的系统发生冲突时,您永远不应该使用pip install安装到系统(--system或在--user非默认的Linux发行版上,省略--user),而这apt install是非常安全的。

\n

解释:

\n

apt是 Linux 发行版的软件包安装工具。如今的 Linux 发行版主要致力于提供一种以相互协作的方式安装软件包而不破坏 \xe2\x80\x93 的方法,例如,如果您尝试安装 libreoffice 使用的库,但在如果版本与您的 libreoffice 不兼容,您的 linux 发行版工具会遗憾地告诉您,要执行您的命令,它必须卸载 libreoffice,因为它无法与您请求的版本一起使用。

\n

事实上,您很少看到这种情况发生,这表明现代 Linux 发行版在这里做得有多好:通常,您可以安装的大多数软件都可以apt很好地协同工作。

\n

pip另一方面,不知道您的计算机上还有哪些可能需要的其他软件。您告诉 pip 安装某个版本的某些内容,该版本甚至会破坏您启动系统 \xe2\x80\x93 的能力,它会继续执行此操作。

\n

pip是 python 特定的。它假设该机器上所有与Python有关的东西都是一种“公平游戏”并且可以任意处理。坦率地说,\xe2\x80\x93 几乎从来不是这种情况,例如,在 Fedora(您没有使用的另一个 Linux 发行版),您可以轻松地使用.dnfaptpip

\n

那么,为什么pip还存在呢?好吧,在某些情况下,pip 可以假设它看到的 python 的每一部分都在它的控制之下:Python 带来了一种称为虚拟环境的机制。在这些中,本身没有安装 python 模块,并且它们不会与计算机上的其他软件 \xe2\x80\x93 发生冲突,因为其他软件不知道环境。

\n

使用它非常简单。您可以使用设置这样的环境

\n
python3 -m venv ~/bertsexperiment\n
Run Code Online (Sandbox Code Playgroud)\n

这会设置一个~/bertsexperiment用于安装 Python 内容的文件夹。然后,您可以从任何您喜欢的地方“激活”该环境(真正做的只是更改一些环境变量)\xe2\x80\x93,但这只会影响当前进程以及从它开始的事情。尝试一下:

\n
source ~/bertsexperiment/bin/activate\n
Run Code Online (Sandbox Code Playgroud)\n

将设置此 shell,以便所有未来的 python 工具都将使用该文件夹作为“前缀”。

\n

例如,如果您想在该 shell 中更新 setuptools,您可以在source执行如上所示的激活脚本后运行pip3 install --upgrade setuptools,它们将被安装到 virtualenv 中。

\n

简而言之:

\n
    \n
  • 如果有疑问,请使用apt,因为让您的软件堆栈协同工作是您的发行版的工作
  • \n
  • pip除非您打算将某些内容安装到仅用于当前项目而不是系统上其他任何内容的文件夹中,否则切勿使用。
    \n因此,您想要使用它的唯一现实时间是当您使用 Python virtualenv 时。
  • \n
\n

  • 在这种情况下使用“pip”类似于“make install”:它只是移动文件。“pip”和“make install”的问题在于它不是您应该用于根文件系统的安装程序。这就是包管理器的用途。因此,使用 *any* 安装程序将东西安装到根文件系统中是一个坏主意,“pip”就是许多例子之一。当然,如果你的 Python 安装不是在 `/` 中,而是在其他位置,例如 `/opt/foobar/python3.10`,那么使用 `pip` 就完全没问题了。这就是 Python venv 的作用,因此在 venv 中使用 pip 是安全的。 (5认同)
  • 这个答案既不符合事实,又过分危言耸听。使用 pip 在您自己的帐户上安装 Python 模块就可以了。您不必将所有内容分开。在 Debian 及其衍生版本上(因此大多数发行版使用“apt”),“pip install”默认为用户模式。所以 `pip install foo` 不会弄乱用户的系统:只有 `pip install --system foo` 才能做到这一点。 (3认同)