[python] requirements.txt로 설치할 때 단일 패키지에서 pip가 실패하지 않도록 중지

패키지를 설치하고 있습니다 requirements.txt

pip install -r requirements.txt

requirements.txt파일을 읽습니다

Pillow
lxml
cssselect
jieba
beautifulsoup
nltk

lxml설치에 실패한 유일한 패키지이므로 모든 것이 실패합니다 (주석에서 larsk가 지적한 예상 결과). 그러나 lxml실패 pip후에도 계속해서 나머지 패키지를 다운로드합니다.

내가 이해 한 바에 pip install -r requirements.txt나열된 패키지 중 하나라도 설치에 실패하면 명령이 실패합니다 requirements.txt.

실행할 pip install -r requirements.txt수있는 것을 설치하고 할 수없는 패키지를 건너 뛰거나 무언가 실패한 것을 끝내기 위해 종료하도록 실행할 때 전달할 수있는 인수 가 있습니까?



답변

각 줄을 실행 pip install하면 해결 방법이 될 수 있습니다.

cat requirements.txt | xargs -n 1 pip install

참고 : -aMacOS에서는 매개 변수를 사용할 수 없으므로 오래된 고양이가 더 휴대하기 편리합니다.


답변

이 솔루션은 requirements.txt에서 빈 줄, 공백 줄, # 주석 줄, 공백 -then- # 주석 줄을 처리합니다.

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

sed 마술에 대한 이 답변의 모자 팁 .


답변

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)

핍 버전 <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 %에 해당하는 비 핵심 종속성이있는 다른 파일을 사용합니다. 대부분의 사용 사례에는 필요하지 않습니다. 그것은 Recommends데비안 꾸러미 의 섹션과 같습니다 .

다음 쉘 스크립트 (필수 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


답변

Windows 사례에 대해 Etienne Prothon에게 감사드립니다.

그러나 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)


답변

Windows의 경우 :

import os
from pip.__main__ import _main as main

error_log = open('error_log.txt', 'w')

def install(package):
    try:
        main(['install'] + [str(package)])
    except Exception as e:
        error_log.write(str(e))

if __name__ == '__main__':
    f = open('requirements1.txt', 'r')
    for line in f:
        install(line)
    f.close()
    error_log.close()
  1. 로컬 디렉토리를 작성하고 requirements.txt파일을 넣으십시오 .
  2. 위의 코드를 복사하여 동일한 디렉토리에 파이썬 파일로 저장하십시오. .py예를 들어 확장 프로그램 을 사용해야 합니다.install_packages.py
  3. cmd를 사용하여이 파일을 실행하십시오. python install_packages.py
  4. 언급 된 모든 패키지는 전혀 멈추지 않고 한 번에 설치됩니다. 🙂

설치 기능에서 다른 매개 변수를 추가 할 수 있습니다. 처럼:
main(['install'] + [str(package)] + ['--update'])


답변