有没有一种方法可以使用pip一次性安装所有Python模块?

10

我想用一个pip命令安装Python 2.7.12的所有可用模块。有没有一种方法可以在不必指定每个软件包名称的情况下完成这个任务?


2
你为什么想要那个?对我来说看起来非常多余。 - Simon Klaver
4
“所有可用模块”对你来说是什么意思?您可以从一个要求文件中安装它们:pip install -r requirements.txt。您也可以列出所有已安装的软件包并将其放入要求文件中:pip freeze > requirement.txt - Laurent LAPORTE
1
@SimonKlaver 我正在开发一个新项目,可能需要在不同的时间安装不同的模块,而我现在不知道我可能需要哪些模块。因此,我只想安装所有可用的模块,这样当我实际需要使用它们时就不必再安装了。 - rsnaveen
4
有成千上万个软件包,你不可能全部安装。 - Daniel Roseman
1
比如说,我遇到了一个使用了“statistics”模块的例子,但当我试图运行代码时显然会出错,因为我之前没有安装它。我只是想知道是否可以使用pip命令一次性安装所有模块。@LaurentLAPORTE - rsnaveen
显示剩余7条评论
3个回答

32

我强烈建议不要这样做,最好的做法是使用requirements.txt文件,列出你想要安装的包。

然后使用pip install -r requirements.txt 安装您项目需要的所有软件包。

这有几个好处:

  • 只安装所需软件包,使得能够重复保持一致性
  • 简洁明了

然而,如果您确实想要安装所有的Python软件包(请注意,有成千上万个),可以通过以下方式安装:

pip search * | grep ")[[:space:]]" | cut -f1 -d" "

我强烈反对这样做,因为它很可能会对您的系统造成严重影响,因为它将尝试安装每一个Python软件包(这也是为什么它放在剧透标签中的原因)。


29
我建议你去做。不要让你的梦想仅止于梦中。 - user559633
1
我猜grep在Windows下不起作用(由于显而易见的原因)。顺便提一句,既然你使用的是Windows,为什么还要在标签中加入Ubuntu @rsnaveen? - Simon Klaver
@SimonKlaver 我同时使用Windows和Ubuntu。我标记了它们正是出于这个原因。为了找到一个只适用于Windows或Ubuntu的命令。 - rsnaveen
1
嗯,这个答案可能在Ubuntu上有效。但在Windows系统中肯定不行,因为那里没有grep命令。 - Simon Klaver
@SimonKlaver 可能已经过时十多年了,但它仍然可以正常工作:UnxUtils - user439793
显示剩余2条评论

3

这个想法很糟糕,但你可以使用autoinstaller,它会自动通过pip下载软件包,如果你没有安装的话。


2
更新:其他答案说这是个糟糕的想法是正确的,因为我使用这种方法安装的某些软件包将无法正常工作,因为它们所需的旧版本依赖已被其他软件包更新。下次我会使用virtualenv。有一天,我会制作一个从packages.pypy.org获取软件包及其依赖项列表,以便某人可以快速创建多个环境。
好吧,我确实找到了一种方法来做到这一点,但只适用于http://packages.pypy.org上最受欢迎的1000个软件包。但是其他页面也可以处理,只需要一些创意。对于该页面,您需要电子表格程序来处理该页面。我使用的是LibreOffice Calc。并且我确实在Windows上使用命令提示符完成了此操作。
首先,打开我刚才发布的链接,并选择/复制所有文本(不要展开网页上的任何软件包名称)。
然后,在Calc中的任何单元格中粘贴它。打开查找和替换对话框。如果您使用另一个电子表格程序,请确保其查找和替换支持正则表达式。选中正则表达式旁边的复选框(或类似的内容),在查找字段中键入downloads:\s+\d+,确保替换为字段中没有文本,并将所有其他选项保留为默认值,单击全部替换(假设该程序具有此按钮)。完成后,通过在查找字段中使用空格进行另一个替换来消除尾随空格(Python软件包名称不包含空格)。完成这两个替换后,每个单元格中都会有一个软件包名称。
然后,将整个电子表格复制到文本编辑器中,任何编辑器都可以(我使用的是记事本)。文本编辑器将每个单元格的内容(即软件包名称)放在其自己的行上。文件中不会有任何空行(但最好检查一下)。此时,您可以关闭电子表格,无需保存其数据。
现在保存文本文件。打开命令提示符并更改到保存文本文件的文件夹。现在键入:
for /F %p in ('type TEXT_FILE_NAME.txt') DO pip.exe install %p

[如果命令提示符无法找到正确的pip,请输入pip的完整路径,例如C:\Python27\Scripts\pip.exe]

完成了,pip现在正在安装我提供链接中列出的所有软件包。

您应该将stdout(也许还有stderr)重定向到文件中,因为命令提示符没有很大的历史缓冲区。为此,在命令的末尾放置以下内容:

>>PIP_STDOUT_FILE.txt 2>>PIP_STDERR_FILE.txt

请注意,如果您使用此方法突然中断 pip,则输出将不再发送到终端。您可能会在软件包安装的中途结束它。特别是,如果您使用文本编辑器查看输出,请经常重新加载文件。与上述相比,更安全的方法是附加 --log LOG_FILE.txt,但日志文件变得更冗长,并像往常一样将其消息写入命令提示符。
有相当数量的:
  1. 仅适用于 Linux 的软件包
  2. 使用 Microsoft C++ 编译器构建的软件包
使用 pip 安装这些软件包将失败,除非您进行一些额外的工作。但对于大多数软件包,这应该可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接