apt-get 安装与 pip 安装

apt-get 安装与 pip 安装

我对下载 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使用?

答案1

吡啶甲酸是 Python 包索引——python 模块的存储库。

pip用于直接从 PyPI 下载和安装软件包。PyPI 由Python 软件基金会. 它是一个专门处理 Python 包的包管理器。

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

apt-get从和安装 Python 包之间的一些区别pip如下:

  • Canonical 仅提供选定 Python 模块的软件包。而 PyPI 托管的 Python 模块范围则要广得多。因此,有很多 Python 模块无法使用 进行安装apt-get

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

  • apt-get在系统范围位置安装 Python 模块。我们不能只在项目中安装模块虚拟环境.pip为我们解决了这个问题。如果我们在激活虚拟环境后使用pip,它足够智能,只安装我们项目虚拟环境中的模块。如前所述,如果系统范围位置已经安装了特定 Python 包的某个版本,而我们的某个项目需要同一 Python 包的旧版本,在这种情况下,我们可以使用虚拟环境和 pip 安装该旧版本的 Python 包,而不会发生任何冲突。

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

您应该使用哪一个:

apt-get都是pip成熟的包管理器,它们在安装时会自动安装任何其他包依赖项。您可以随意使用任何一个。但是,如果您需要安装特定版本的 python-package,或者在虚拟环境中安装包,或者安装仅托管在 PyPI 上的包;只有才能帮助您解决该问题。否则,如果您不介意在系统范围的位置安装包,那么使用或 都pip无关紧要。apt-getpip

答案2

正如@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 包时,选择什么就取决于你了:pip或者apt-get。例如此问答关于使用pip和安装包的区别apt-get

答案3

这是在广泛联系的GitHub pip 网站上的问题对主题系统安装了pip对比本地安装的 pip

  1. 仅使用系统包管理器来升级系统 pip。系统安装的 pip 归发行版所有,如果您不使用发行版提供的工具来管理它,就会遇到问题。是的,我们知道 pip 说“您应该使用 pip install -U pip 进行升级” - 在 pip 管理的安装中确实如此,理想情况下,发行版应该修补此消息以在系统 pip 中提供适当的说明,但他们没有这样做。我们正在与他们合作,但这不会很快发生(请记住,我们正在研究人们在这里升级旧版本 pip 的情况,因此修补新版本不会有帮助)。

  2. 切勿将 sudo 与 pip 一起使用。这是第一点的延续。如果您认为需要使用 sudo,则您可能正在尝试修改发行版拥有的文件。请参阅第 1 点。

  3. 最好使用 --user。通过这样做,您只会在个人目录中安装软件包,因此可以避免干扰 pip 的系统副本。但您需要注意这里的 PATH 问题。我们稍后会介绍这些问题。简而言之,遵循此建议仍然可能会遇到问题,因为您实际上并没有运行以 --user 身份安装的包装器。

答案4

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

相关内容