python安装到一半停止_关于python:使用requirements.txt进行安装时,停止单个包上的pip失败...

我正在安装requirements.txt中的包

pip install -r requirements.txt

requirements.txt文件显示:

Pillow

lxml

cssselect

jieba

beautifulsoup

nltk

lxml是唯一一个安装失败的软件包,这导致了所有的失败(如Larsks在评论中指出的预期结果)。但是,在lxml失败后,pip仍然运行并下载其余的包。

据我所知,如果requirements.txt中列出的任何软件包安装失败,pip install -r requirements.txt命令将失败。

在运行pip install -r requirements.txt时,有没有什么可以说服它安装它能安装的东西,跳过它不能安装的包,或者在它看到失败时立即退出的理由?

从requirements.txt中删除lxml

谢谢,在这种情况下这是可行的,但总的来说,有什么办法可以解决这个问题吗?或者只是运行这个命令,看到它失败,然后删除包列表,这是正常的吗?

如果一个包列在requirements.txt中,那么它可能是必需的,因此,如果无法安装该包,pip将失败是合理的。如果代码在没有这个包的情况下运行,那么这几乎不是一个要求。从requirements.txt中随机删除失败的包似乎只会导致缺少依赖项的问题。

伟大的观点。会是这种行为的一个很好的理由。

使用pip install运行每条线路可能是一种解决方案。

cat requirements.txt | xargs -n 1 pip install

注:MacOS下没有-a参数,所以旧的cat更便于携带。

Mac:cat requirements.txt | xargs -n 1 pip install

我必须这样做:cat requirements.txt | cut -f1 -d"#" | sed '/^\s*$/d' | xargs -n 1 pip install删除评论中的任何内容,去掉空行。

至少在gnu xargs中,有-a标志选项,它允许xargs从文件中读取参数,所以这可以作为xargs -n 1 -a requirements.txt pip install来完成。防止UOOC和过度管道

对于Windows:PIP版本>=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)

PIP版本< 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)

xargs解决方案可以工作,但可能存在可移植性问题(BSD/GNU),并且/或者如果您的需求文件中有注释或空行,那么会很麻烦。

对于需要这种行为的用例,我使用两个单独的需求文件,一个只列出需要始终安装的核心依赖项,另一个具有非核心依赖项的文件占大多数用例不需要的90%。这相当于debian包的Recommends部分。

我使用以下shell脚本(需要sed来安装可选的依赖项:

#!/bin/sh

while read dependency; do

dependency_stripped="$(echo"${dependency}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"

# Skip comments

if [[ $dependency_stripped == \#* ]]; then

continue

# Skip blank lines

elif [ -z"$dependency_stripped" ]; then

continue

else

if pip install"$dependency_stripped"; then

echo"$dependency_stripped is installed"

else

echo"Could not install $dependency_stripped, skipping"

fi

fi

done < recommends.txt

谢谢,Etienne Prothon为Windows案件。

但是,在升级到pip 18之后,pip包不会向公众公开main。所以您可能需要像这样更改代码。

# This code install line by line a list of pip package

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)

此解决方案处理Requirements.txt中的空行、空白行、注释行、空白然后注释行。

cat requirements.txt | sed -e '/^\s*#.*$/d' -e '/^\s*$/d' | xargs -n 1 pip install

这是SED魔术的答案。

您对lxml的使用有要求吗?它们在这里安装:

sudo apt-get install libxml2-dev libxslt-dev python-dev

如果您使用Windows或Mac,也可以进行检查。或者,设置static_deps=true将自动下载并构建两个库。(c)http://lxml.de/installation.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值