安装软件包命令Pip Install -r如何继续失败的过去安装?

32

我正在使用pip-python命令安装一系列软件包。

pip install -r requirements.txt

有时由于各种原因,安装软件包会失败。是否可能让它即使出现这些错误,也能继续安装下一个软件包?

4个回答

40

我遇到了同样的问题。 按照 @Greg Haskins 的思路,也许这个 bash 一行命令更简洁:

cat requirements.txt | while read PACKAGE; do pip install "$PACKAGE"; done

# TODO: extend to make the script print a list of failed installs,
# so we can retry them.

(对于不熟悉 shell 脚本的人来说:这会为列出的每个包调用 pip install 命令)

当然,也适用于依赖项失败的情况!


1
TODO部分完成了吗?为什么它的速度比pip install -r requiremnets.txt慢? - alper
1
TODO从未被实现。它运行每个软件包的pip而不是一次性运行所有软件包,因此每次启动时间都会累积,导致速度变慢。请注意,这个解决方案并不“聪明”,但在快速和简单的时刻可以使用。我建议修复失败的依赖项! - caesarsol
这个很好用,谢谢。 - You_Dont_Know_Me

19
你可以编写一个小包装脚本来迭代调用pip,类似于以下内容:
#!/usr/bin/env python
"""
pipreqs.py: run ``pip install`` iteratively over a requirements file.
"""
def main(argv):
    try:
        filename = argv.pop(0)
    except IndexError:
        print("usage: pipreqs.py REQ_FILE [PIP_ARGS]")
    else:
        import pip
        retcode = 0
        with open(filename, 'r') as f:
            for line in f:
                pipcode = pip.main(['install', line.strip()] + argv)
                retcode = retcode or pipcode
        return retcode
if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv[1:]))
你可以像这样调用它:pipreqs.py requirements.txt --some --other --pip --args
请注意,这仅适用于“即使失败也要继续”的原则,如果pip无法安装所列出的某个子需求,则其父需求当然仍将失败。

谢谢,这似乎有效。不过有一个令人烦恼的副作用:pip 的日志信息似乎会在要求文件中列出更多软件包时重复(甚至三倍等)。这可能是记录器实例化问题。 - blueFast
如果出现“AttributeError: 'module' object has no attribute 'main'”错误,请参见https://dev59.com/-1cQ5IYBdhLWcg3wD_ho#49853826。 - bli

11

在Windows命令提示符/cmd中:

# For each package,p, in requirements.txt, pip install package
FOR /F %p IN (requirements.txt) DO pip install %p

0
修改pip需求文件,在每行开头添加像pip install这样的pip命令。 例如,使用vim:
  1. 进入可视块模式(ctrl-v),
  2. 将光标移动到开始列
  3. 按下shift+i
  4. 输入或粘贴pip install
  5. 按下esc

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