apt-get install vs pip install

我对下载python包时必须使用上述命令的情况感到有点困惑。 我试图按照这个问题的答案下载一个名为pyudev的软件包。 我执行了这个命令:

sudo pip install python-pyudev 

但收到以下消息:

 Downloading/unpacking python-pyudev Could not find any downloads that satisfy the requirement python-pyudev Cleaning up... No distributions at all found for python-pyudev Storing complete log in /home/vineet/.pip/pip.log 

但是以下工作正常:

 sudo apt-get install python-pyudev 

什么时候apt-get应该用于安装包,什么时候使用python-pip

PyPI是Python Package索引 – python模块的存储库。

pip用于直接从PyPI下载和安装软件包。 PyPI由Python Software Foundation托管。 它是一个专门的包管理器,只处理python包。

apt-get用于从Canonical托管的Ubuntu存储库下载和安装软件包。

apt-getpip安装python包之间的一些区别如下:

  • Canonical仅为选定的python模块提供包。 然而,PyPI拥有更广泛的python模块。 所以,有很多python模块,你将无法使用apt-get安装。

  • Canonical仅托管任何软件包的单个版本(通常是最新版本或最近发布的版本)。 所以,使用apt-get我们无法决定我们想要的python-package的版本。 pip在这种情况下帮助我们。 我们可以安装以前在PyPI上传的任何版本的软件包。 这在依赖项冲突的情况下非常有用。

  • apt-get在系统范围内安装python模块。 我们不能只在我们的项目virtualenv中安装模块。 pip为我们解决了这个问题。 如果我们在激活virtualenv后使用pip ,它足够智能,只能在我们的项目virtualenv中安装模块。 如前所述,如果某个特定python包的版本已安装在系统范围的位置,并且我们的一个项目需要相同python包的旧版本,在这种情况下我们可以使用virtualenv和pip来安装那个旧版本的python包没有任何冲突。

  • 正如@RaduRădeanu 在这个答案中指出的那样,包的名称通常也会有所不同。 Canonical通常将Python 2包命名为python- ,将Python 3包python3-python3- 。 而对于pip我们通常只需要对Python 2和Python3包使用

你应该使用哪一个:

apt-getpip都是成熟的包管理器,可以在安装时自动安装任何其他包依赖项。 您可以随意使用任何人。 但是,如果您需要安装特定版本的python-package,或者在virtualenv中安装该软件包,或者安装仅在PyPI上托管的软件包; 只有pip可以帮助你解决这个问题。 否则,如果您不介意在系统范围内安装软件包,那么使用apt-getpip并不重要。

正如@AvinashRaj在他的评论中所说, pip仅用于安装python包,但apt-get用于安装以任何编程语言创建的包。

您的主要问题是在两种情况下都找到正确的包名称:

 pip search pyudev 

将使用pip install为您提供要安装的软件包的正确名称

 apt-cache search pyudev 

将使用apt-get install为您提供要安装的软件包的正确名称:

 radu@Radu: ~ $ pip search pyudev pyudev - A libudev binding radu@Radu: ~ $ apt-cache search pyudev python-pyudev - Python bindings for libudev python3-pyudev - Python3 bindings for libudev 

所以,在结论中, sudo apt-get install python-pyudevsudo pip install pyudev ,而不是sudo pip install python-pyudev

现在取决于你想要安装python包时想要选择的内容: pipapt-get 。 例如,请参阅此问答,了解使用pipapt-get安装软件包的不同之处。

我首选的方法是始终使用apt并且只有在Debian / Ubuntu存储库中尚未提供模块才能使用pip ,但仅限于用户上下文 – --user flag。 通过使用pip无论如何必须从让我们说Ubuntu的存储库中安装所有构建依赖项,或者自己提供它们,这可能是一项繁琐的任务。 apt-get安装二进制包,而pip在下载后构建它们。 不应该使用pip将模块安装到系统位置。 这是完全错误的。 始终使用--user标志将模块安装到主位置。 正确配置PYTHONPATH让python首先从HOME apt-get模块,然后使用apt-get安装系统模块。