我对下载 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-get
pip
答案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-pyudev
是sudo pip install pyudev
,而不是sudo pip install python-pyudev
。
现在,当你想安装 Python 包时,选择什么就取决于你了:pip
或者apt-get
。例如此问答关于使用pip
和安装包的区别apt-get
。
答案3
这是在广泛联系的GitHub pip 网站上的问题对主题系统安装了pip对比本地安装的 pip:
仅使用系统包管理器来升级系统 pip。系统安装的 pip 归发行版所有,如果您不使用发行版提供的工具来管理它,就会遇到问题。是的,我们知道 pip 说“您应该使用 pip install -U pip 进行升级” - 在 pip 管理的安装中确实如此,理想情况下,发行版应该修补此消息以在系统 pip 中提供适当的说明,但他们没有这样做。我们正在与他们合作,但这不会很快发生(请记住,我们正在研究人们在这里升级旧版本 pip 的情况,因此修补新版本不会有帮助)。
切勿将 sudo 与 pip 一起使用。这是第一点的延续。如果您认为需要使用 sudo,则您可能正在尝试修改发行版拥有的文件。请参阅第 1 点。
最好使用 --user。通过这样做,您只会在个人目录中安装软件包,因此可以避免干扰 pip 的系统副本。但您需要注意这里的 PATH 问题。我们稍后会介绍这些问题。简而言之,遵循此建议仍然可能会遇到问题,因为您实际上并没有运行以 --user 身份安装的包装器。
答案4
我首选的方式是始终使用apt
,并且仅当模块尚未在 Debian/Ubuntu 存储库中使用时才使用pip
,但仅在用户上下文中 ---user
标志。pip
无论如何,通过使用一个,必须从 Ubuntu 的存储库中安装所有构建依赖项,或者自己提供它们,这可能是一项繁琐的任务。在下载后构建apt-get
二进制包时安装pip
它们。不应该使用 pip 将模块安装到系统位置。这完全是错误的。始终使用--user
标志将模块安装到主位置。正确配置的 PYTHONPATH 让 python 首先从 HOME 选择模块,然后使用安装的系统模块apt-get
。