使用pip和apt-get安装软件包有什么区别?

42

我正在尝试在Ubuntu机器上部署一个Django网站。我需要安装Psycopg2和PIL,但似乎我可以使用apt-get或pip来安装它们。这两种方法安装有什么区别吗?我知道使用pip,我可以将其安装到虚拟环境中,但使用apt-get会将其安装在全局Python环境中。

7个回答

40

你可能已经知道apt-get的好处。自动更新通知,其他需要这些工具的apt安装包知道它们已安装等。

使用pip,你知道你在安装时得到的是最新版本,可以安装到非默认版本的Python中,也可以安装到虚拟环境中。

如果你不需要pip提供的任何功能,并且通常不需要安装其他Python软件包,这些软件包在APT上不可用,那么请使用APT版本。


1
通过pip安装,您知道在安装时您将获得最新版本。这可能是一个关键点,我想强调一下:当您通过apt安装时,通常只能使用您的发行版支持的软件包版本。 - jrh

22

许多回答这个问题的人都忽略了使用 apt-get 的一个优势:

apt-get预编译的,因此安装速度比pip 快得多

要安装numpy、matplotlib、pandas和其他scipy相关模块,apt-get 只需要几秒钟;而pip 可能需要10分钟以上。

如果您具有root访问权限并且不介意使用略旧版本的软件,那么使用apt-get 是一种快速又无忧的选择。


11
自从轮子出现以来,pip也提供了二进制包。 - gnebehay
1
看起来并非所有的包都有可用的 wheels,至少对于我使用的系统而言是这样。特别是一些数学包,例如numpy、pandas、matplotlib等等。 - laviex

6

您需要注意的是,包管理器中的内容经过了一些集成测试,而在Pypi中的内容未经测试。

Pypi适用于开发。

在生产环境中,您可能会选择使用Pypi,但很快您会发现您始终可以依赖包管理器中的内容...


3

你应该使用哪一个: apt-get和pip都是成熟的软件包管理器,安装时会自动安装任何其他软件包依赖项。你可以随意使用其中任何一个。然而,如果你需要安装特定版本的Python软件包,或者在虚拟环境中安装软件包,或者安装仅托管在PyPI上的软件包,则只有pip可以帮助你解决这个问题。否则,如果你不介意将软件包安装在系统范围内的位置,那么无论你使用apt-get还是pip都没有太大关系。

应该使用哪一个: apt-get 和 pip 都是成熟的包管理器,它们在安装时会自动安装其他依赖包。你可以根据自己的喜好任选其一。但是,如果你需要安装特定版本的 Python 包,或者在虚拟环境中安装包,或者安装仅托管在 PyPI 上的包,那么只有 pip 可以帮助你解决这些问题。否则,如果你不介意将包安装到系统范围内的位置,那么无论你使用 apt-get 还是 pip 都没有太大关系。


3

我建议使用pip安装Python软件包,因为一些操作系统的软件包管理器会对软件包进行自定义,可能会破坏或更改软件包的行为。

如果您需要全局安装软件包:

$ sudo pip install PACKAGE

它将尝试从PyPI或项目链接下载您的软件包。


2
我发现了关于这个问题的一些信息。我的Ubuntu系统中同时安装了Python 3.6和3.7版本。当使用apt install python3-xxx命令安装xxx时,它将被安装在/usr/lib/python3/dist-packages目录下。但是,使用pip3 install xxx命令安装时,它会被安装在/usr/local/lib/python3.7(我默认的Python版本)/dist-packages目录下。当切换到Python 3.6版本时,通过pip3安装的xxx可能无法正常工作,而通过apt安装的则可以正常工作。

0
有时候名称不同:

sudo apt install libopencv-dev python3-opencv

pip install opencv-python

但有时候相同:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接