Instaluję pakiety z requirements.txt
pip install -r requirements.txt
requirements.txt
Plik brzmi:
Pillow
lxml
cssselect
jieba
beautifulsoup
nltk
lxml
jest jedynym pakietem, którego nie można zainstalować, a to prowadzi do awarii wszystkiego (oczekiwane wyniki, jak wskazał larsks w komentarzach). Jednak po lxml
awarii pip
nadal działa i pobiera resztę pakietów.
Z tego, co rozumiem, pip install -r requirements.txt
polecenie zakończy się niepowodzeniem, jeśli którykolwiek z pakietów wymienionych w requirements.txt
nie zostanie zainstalowany.
Czy jest jakiś argument, który mogę przekazać podczas uruchamiania, pip install -r requirements.txt
aby nakazać mu zainstalowanie tego, co może i pominąć pakiety, których nie może, lub zakończyć, gdy tylko zobaczy, że coś się nie powiedzie?
requirements.txt
, jest prawdopodobnie wymagany , więc ma sens, żepip
nie powiedzie się, jeśli pakiet nie może zostać zainstalowany. Jeśli kod i tak działa bez tego pakietu, to nie był to wymóg.requirements.txt
Wydaje się, że losowe usuwanie nieudanych pakietów z programu spowoduje problemy z brakującymi zależnościami.pip install -r <some file>
przepływie pracy, aby ustandaryzować tworzenie odpowiedniego środowiska.Odpowiedzi:
Uruchomienie każdego wiersza z
pip install
może być obejściem.cat requirements.txt | xargs -n 1 pip install
Uwaga:
-a
parametr nie jest dostępny pod MacOS, więc stary kot jest bardziej przenośny.źródło
cat requirements.txt | xargs -n 1 pip install
cat requirements.txt | cut -f1 -d"#" | sed '/^\s*$/d' | xargs -n 1 pip install
usunąć cokolwiek z komentarzy i pozbyć się pustych wierszy.xargs
jest-a
opcja flagi, która pozwala naxargs
odczyt argumentów z pliku, więc można to zrobić jakoxargs -n 1 -a requirements.txt pip install
. Zapobiega UUOC i nadmiernej hydrauliceFOR /F %k in (requirements.txt) DO pip install %k
-a
flagi, należy rozważyć< requirements.txt xargs -n 1 pip install
, czy jeśli nie podoba ci się przekierowaniem na froncie,xargs -n 1 pip install < requirements.txt
. :-)To rozwiązanie obsługuje puste wiersze, białe znaki, # wiersze komentarza, białe znaki-to- # wiersze komentarza w twoim Requirements.txt.
cat requirements.txt | sed -e '/^\s*#.*$/d' -e '/^\s*$/d' | xargs -n 1 pip install
Cynk kapelusza do tej odpowiedzi na magię seda.
źródło
pip freeze
zamiastcat requirements.txt
.Dla Windowsa:
wersja 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)
wersja 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)
źródło
Te
xargs
prace rozwiązanie, ale może mieć problemy Przenośność (BSD / GNU) i / lub być uciążliwe, jeśli masz uwagi lub puste wiersze w pliku wymagań.Jeśli chodzi o przypadek użycia, w którym takie zachowanie byłoby wymagane, używam na przykład dwóch oddzielnych plików wymagań, jednego, który zawiera tylko podstawowe zależności, które muszą być zawsze instalowane, a drugi plik z zależnościami innymi niż podstawowe, które występują w 90% przypadków nie jest potrzebne w większości zastosowań. Byłby to odpowiednik
Recommends
sekcji pakietu Debiana.Używam następującego skryptu powłoki (wymaga
sed
), aby zainstalować opcjonalne zależności :#!/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
źródło
Dzięki, Etienne Prothon za obudowy Windows.
Ale po aktualizacji do pip 18, pakiet pip nie ujawnia main publicznie. Być może będziesz musiał zmienić kod w ten sposób.
# 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)
źródło
Dla Windowsa:
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()
requirements.txt
w nim swój plik..py
rozszerzenia, na przykładinstall_packages.py
python install_packages.py
Możesz dodać inne parametry w funkcji instalacji. Lubić:
main(['install'] + [str(package)] + ['--update'])
źródło