使用requirements.txt进行安装时,停止单个包上的pip失败

emh*_*emh 102 python pip

我正在从requirements.txt安装包

pip install -r requirements.txt

requirements.txt文件读取:

Pillow
lxml
cssselect
jieba
beautifulsoup
nltk
Run Code Online (Sandbox Code Playgroud)

lxml是唯一一个无法安装的软件包,这导致一切都失败了(预期结果如评论中的larsks所指出的).但是,lxml失败后pip仍会运行并下载其余的软件包.

根据我的理解,pip install -r requirements.txt如果requirements.txt无法安装中列出的任何软件包,该命令将失败.

在运行时是否可以传递任何参数pip install -r requirements.txt,告诉它安装它可以并跳过它不能的包,或者一看到它失败就立即退出?

MZD*_*MZD 174

运行每一行pip install可能是一种解决方法.

cat requirements.txt | xargs -n 1 pip install
Run Code Online (Sandbox Code Playgroud)

注意:-a参数在MacOS下不可用,因此旧猫更便携.

  • 对于 Windows :) `FOR /F %k in (requirements.txt) DO pip install %k` (20认同)
  • 对于mac:`cat requirements.txt | xargs -n 1 pip install` (18认同)
  • 我不得不这样做:`cat requirements.txt | cut -f1 -d"#"| sed'/ ^\s*$/d'| xargs -n 1 pip install`删除评论中的任何内容并删除空行. (4认同)

小智 18

对于 Windows 用户,您可以使用以下命令:

FOR /F %k in (requirements.txt) DO ( if NOT # == %k ( pip install %k ) )
Run Code Online (Sandbox Code Playgroud)

逻辑:对于文件(requirements.txt)中的每个依赖项,安装它们并忽略那些以“#”开头的依赖项。


rou*_*ble 16

此解决方案处理您的requirements.txt 中的空行、空格行、# 注释行、空格然后-# 注释行。

cat requirements.txt | sed -e '/^\s*#.*$/d' -e '/^\s*$/d' | xargs -n 1 pip install
Run Code Online (Sandbox Code Playgroud)

对于 sed 魔法的这个答案的帽子提示。


Eti*_*hon 5

对于Windows:

点版本> = 18

import sys
from pip._internal import main as pip_main

def install(package):
    pip_main(['install', package])

if __name__ == '__main__':
    with open(sys.argv[1]) as f:
        for line in f:
            install(line)
Run Code Online (Sandbox Code Playgroud)

点版本<18

import sys
import pip

def install(package):
    pip.main(['install', package])

if __name__ == '__main__':
    with open(sys.argv[1]) as f:
        for line in f:
            install(line)
Run Code Online (Sandbox Code Playgroud)


Bia*_*rys 5

一行PowerShell:

Get-Content .\requirements.txt | ForEach-Object {pip install $_}

如果您需要忽略某些行,那么:

Get-Content .\requirements.txt | ForEach-Object {if (!$_.startswith("#")){pip install $_}}

或者

Get-Content .\requirements.txt | ForEach-Object {if ($_ -notmatch "#"){pip install $_}}


小智 5

基于 @MZD 的答案,这里有一个解决方案,用于过滤掉以注释符号 # 开头的所有文本

cat requirements.txt | grep -Eo '(^[^#]+)' | xargs -n 1 pip install
Run Code Online (Sandbox Code Playgroud)