为啥 python 框架安装指南会建议对一些必需的包使用 easy_install 而对其他包使用 pip?

Posted

技术标签:

【中文标题】为啥 python 框架安装指南会建议对一些必需的包使用 easy_install 而对其他包使用 pip?【英文标题】:Why would a python framework installation guide advise the use of easy_install for some required packages and pip for others?为什么 python 框架安装指南会建议对一些必需的包使用 easy_install 而对其他包使用 pip? 【发布时间】:2013-03-29 19:17:34 【问题描述】:

在尝试“简化”安装适用于 Windows 的 SimpleCV 框架 superpack 失败后。我现在正在阅读手动安装指南(我可以接受,因为我可以更好地控制安装,并且最终可能会了解如何在 Windows 中正确安装 Python 包!)

我试图理解每一步,而不是盲目地遵循指南,所以我对此感到困惑..

 easy_install pyreadline
 easy_install PIL
 easy_install cython
 easy_install pip
 pip install ipython
 pip install https://github.com/ingenuitas/SimpleCV/zipball/1.3

为什么不尽快easy_install pip 然后再pip 其他包?..

 easy_install pip     I intend to research and probably use get-pip.py here
 pip install pyreadline        
 pip install PIL
 pip install cython
 pip install ipython
 pip install https://github.com/ingenuitas/SimpleCV/zipball/1.3

这样做有什么陷阱吗? (我有限的理解是使用 pip 总是比使用 easy_install 更好。)

我知道这个问题与 SimpleCV 直接相关,但我想学习正确的方法,以便将来在没有指南的情况下安装包集合。

【问题讨论】:

【参考方案1】:

我相信答案是pip 目前不支持安装二进制发行版,即包含预编译 C 扩展模块的 Python 包。 easy_install 会。

顺便说一句,正在为pip(和easy_install)提供替代品,这将完全支持所有平台上的二进制发行版。有关概述,请参阅 here。

【讨论】:

好的,谢谢 Ned,所以有时不得不求助于 easy_install 的另一个原因。我会密切关注未来的发展,因为我也对使用分发代替设置工具感到困惑。【参考方案2】:

pip 获取您尝试安装的软件包的源代码并编译它们。因此,如果您没有安装和配置编译器,它将无法为包含用 C 编写的扩展的包执行此操作,在这种情况下适用于 pyreadlinePILcython

easy_install 使用来自pypi 的预编译包(至少对于 Windows,如果它们可用的话),这意味着您不需要自己编译所有内容。

对于纯 python 包,使用 pip 代替 easy_install 没有问题,如果你有编译器并安装了必要的构建依赖项,它也应该可以工作。

【讨论】:

感谢Mata如此清晰的回答!我一直在想“我们会同时下载软件包,有什么区别?(除了 pip 带来的好处)-我没有考虑实际下载的是什么,所以再次感谢您清除它。它确实提出了如何确定一个包是否是纯 python 的问题。如果尝试编译失败,我应该默认只尝试 pip 并求助于 easy_install 吗? 这就是我通常做的事情。 pip 也遵循 pypi 的下载 url,因此有时它会从项目主页安装较新的版本,然后从 pypi 安装打包的版本。如果C 在描述中被列为“编程语言”,您也可以直接查看 pypi。 是的,已经注意到 PyPi 上的语言参考,不确定这是否只是一个元标记,表明包可能以某种方式与 C 相关,而不是肯定有 C 源(例如“C”纯python编写的教程包)。 ...公平地说,我已经仔细检查过,它明确指出“编程语言”。我知道 pip 会跟随链接并尝试获取最新版本 - 我想这有时会导致进一步的问题。 元数据由包所有者维护,因此不能保证它是正确的。通常看到C 有一个非常强烈的暗示,它包含这种语言的扩展,但你是对的,维护者也可能出于其他原因将它放在那里。

以上是关于为啥 python 框架安装指南会建议对一些必需的包使用 easy_install 而对其他包使用 pip?的主要内容,如果未能解决你的问题,请参考以下文章

按钮锁定到指南。为啥位置会随着方向变化?

HAProxyNginx 配置 HTTP/2 完整指南

谷歌商店为啥闪退

为啥 Swift 语言指南建议使用 Int “即使已知值是非负的”?

html5开发android,ios应用用啥框架最好?必需要用框架吗,为啥?

在 R 中,为啥样式指南建议只使用双引号?