当前位置: 首页>>技术教程>>正文


apt-get安装与pip安装

, , , ,

问题描述

我对下载python软件包时必须使用上述命令的情况有些困惑。我试图按照安装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包索引 – 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在system-wide位置安装python模块。我们不能只在我们的项目virtualenv中安装模块。 pip为我们解决了这个问题。如果我们在激活virtualenv后使用pip,它足够智能,只需将模块安装到我们的项目virtualenv中。如前所述,如果在system-wide位置中已经安装了特定的python软件包版本,并且我们的某个项目需要旧版本的相同python软件包,则在这种情况下,我们可以使用virtualenv和pip来安装旧版本版本的python包没有任何冲突。

  • 由于@Radu Rădeanu指出in this answer,包装的名称通常也会有所不同。 Canonical通常将Python 2软件包命名为python-<package_name>,将Python 3软件包命名为python3-<package_name>。而对于pip,我们通常只需要将<package_name>用于Python 2以及Python3包。

你应该使用哪一个:

apt-getpip都是成熟的包管理器,可以在安装时自动安装任何其他包依赖项。只要你喜欢,你可以使用任何人。但是,如果您需要安装特定版本的python-package,或者将软件包安装在virtualenv中,或者安装只包含在PyPI上的软件包,只有pip可以帮助你解决这个问题。否则,如果您不介意在system-wide位置安装软件包,使用apt-getpip并不重要。

次佳解决方法

正如@AvinashRaj在his comment中所说,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-pyudev的记者是sudo pip install pyudev,而不是sudo pip install python-pyudev

现在取决于你想要安装python包时想要选择什么:pipapt-get。请参阅this Q&A关于使用pipapt-get安装包装的差异。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/900.html,未经允许,请勿转载。