我一直在尝试安装一个依赖于设置工具,显然该模块是使用安装的易于。但是,它似乎是错误的版本,所以我尝试使用它来安装它点只是为了看看是否有任何变化(剧透:显然没有任何变化)。
以下之间有什么区别(如果有)?
pip3 install setuptools
和:
apt install python3-setuptools
答案1
如果有人能解释以下之间的差异(如果有),我将不胜感激:
最高级别:当事情可能与您的系统发生冲突时,您永远不应该使用pip install
安装到系统(--system
或在--user
非默认的Linux发行版上,省略),而这是非常安全的。--user
apt install
解释:
apt
是 Linux 发行版的软件包安装工具。如今的 Linux 发行版主要致力于提供一种安装软件包的方式,这种方式可以相互协作而不会中断 - 例如,如果您尝试安装 libreoffice 使用的库,但其版本与您的版本不兼容libreoffice,您的 Linux 发行版工具会遗憾地告诉您,要执行您的命令,它必须卸载 libreoffice,因为它无法与您请求的版本一起使用。
事实上,您很少看到这种情况发生,这表明现代 Linux 发行版在这里做得有多好:通常,您可以安装的大多数软件都可以apt
很好地协同工作。
pip
另一方面,不知道您的计算机上还有哪些可能需要的其他软件。你告诉 pip 安装某个版本的东西,甚至会破坏你启动系统的能力 - 它会继续这样做。
pip
是 python 特定的。它假设该机器上所有与Python有关的东西都是一种“公平游戏”并且可以任意处理。坦率地说,情况几乎从来都不是这样——例如,在 Fedora(您使用的另一个 Linux 发行版)上不是使用),您可以使用 轻松破解安装工具dnf
(Fedora 的apt
,如果您愿意的话)pip
。
那么,为什么pip
还存在呢?嗯,有是在这种情况下,pip 可以假设它看到的 python 的每一部分都在它的控制之下:Python 带来了一种称为虚拟环境。在这些中,本身没有安装 python 模块,并且它们不会与计算机上的其他软件发生冲突 - 只是因为其他软件不了解环境。
使用它非常简单。您可以使用设置这样的环境
python3 -m venv ~/bertsexperiment
这会设置一个~/bertsexperiment
用于安装 Python 内容的文件夹。然后,您可以从任何您喜欢的地方“激活”该环境(实际上所做的只是更改一些环境变量) - 但这只会影响当前流程以及从该流程开始的事情。尝试一下:
source ~/bertsexperiment/bin/activate
将设置此 shell,以便所有未来的 python 工具都将使用该文件夹作为“前缀”。
例如,如果您想在该 shell 中更新 setuptools,您可以在执行source
如上所示的激活脚本后运行pip3 install --upgrade setuptools
,它们将被安装到 virtualenv 中。
简而言之:
- 如果有疑问,请使用
apt
,因为让您的软件堆栈协同工作是您的发行版的工作 pip
除非您打算将某些内容安装到仅用于当前项目而不是系统上其他任何内容的文件夹中,否则切勿使用。
因此,您唯一想要使用它的实际时间是当您使用 Python virtualenv 时。
答案2
这实际上取决于您的最终目标。
- 另一个 Debian 软件包中的某些内容依赖于此软件包?肯定用
apt
。 - 或者相反,你想要创造Debian 或基于 Debian 的发行版(如 Ubuntu、Mint 等)的一个或一组软件包 - 再次强调,绝对留在
apt
陆地上。 - 你想要安装的东西需要比你在 Debian 上找到的版本更新的版本 - 你可以寻找 backported
.deb
从以下位置寻找向后移植的软件包https://backports.debian.org/或随机 PPA,但也许在这一点上,迁移到pip
. (虽然有时包装工作会增加显着的价值,但需要付出不小的努力;那么,PPA 确实可以节省您的时间。) - 您想要开发自己的 Python 脚本,并且最好拥有您所依赖的 Python 包的最新和最好的功能 - 通常然后使用
pip
- ...或者甚至直接从上游 Github 项目或其他什么地方安装东西,以获得真正的前沿。但可能不要延伸得太远。如果您没有专业的软件开发团队,请坚持使用相当稳定的版本,除了您所依赖的最有价值、最关键的一两个软件包之外。
回顾一下,什么有意义最终取决于您处于成熟周期的哪个阶段。官方 Debian 软件包的好处是它们往往非常稳定且经过时间考验,但缺点是您将无法运行具有最精彩新功能的最新版本。
另请记住,某些 Debian 软件包会竭尽全力将打包软件与更广泛的 Debian 生态系统集成。对于随机的 Python 脚本来说,这通常并不重要,但如果它是 Debian 系统管理工具或某种基础设施项目,显然您需要上游可能没有的所有 Debian 部分,或者默认情况下可能无法正确启用和配置。