问题描述
我对下载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-get
和pip
安装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-get
和pip
都是成熟的包管理器,可以在安装时自动安装任何其他包依赖项。只要你喜欢,你可以使用任何人。但是,如果您需要安装特定版本的python-package,或者将软件包安装在virtualenv中,或者安装只包含在PyPI上的软件包,只有pip
可以帮助你解决这个问题。否则,如果您不介意在system-wide位置安装软件包,使用apt-get
或pip
并不重要。
次佳解决方法
正如@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包时想要选择什么:pip
或apt-get
。请参阅this Q&A关于使用pip
和apt-get
安装包装的差异。
参考资料