Stop pip from failing on single package when installing with requirements.txt
我正在安装requirements.txt中的包
pip install -r requirements.txt
requirements.txt文件显示:
1 2 3 4 5 6 | Pillow lxml cssselect jieba beautifulsoup nltk |
据我所知,如果
在运行
使用
1 | cat requirements.txt | xargs -n 1 pip install |
注:MacOS下没有
对于Windows:
PIP版本>=181 2 3 4 5 6 7 8 9 10 | 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
1 2 3 4 5 6 7 8 9 10 | 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) |
对于需要这种行为的用例,我使用两个单独的需求文件,一个只列出需要始终安装的核心依赖项,另一个具有非核心依赖项的文件占大多数用例不需要的90%。这相当于debian包的
我使用以下shell脚本(需要
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/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。所以您可能需要像这样更改代码。
1 2 3 4 5 6 7 8 9 10 11 | # 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中的空行、空白行、注释行、空白然后注释行。
1 | cat requirements.txt | sed -e '/^\s*#.*$/d' -e '/^\s*$/d' | xargs -n 1 pip install |
这是SED魔术的答案。
您对lxml的使用有要求吗?它们在这里安装:
1 | sudo apt-get install libxml2-dev libxslt-dev python-dev |
如果您使用Windows或Mac,也可以进行检查。或者,设置static_deps=true将自动下载并构建两个库。(c)http://lxml.de/installation.html