2011-06-23 21 views

Odpowiedz

10

można napisać mały skrypt otoki zadzwonić pip iteracyjnie, coś takiego:

#!/usr/bin/env python 
""" 
pipreqs.py: run ``pip install`` iteratively over a requirements file. 
""" 
def main(argv): 
    try: 
     filename = argv.pop(0) 
    except IndexError: 
     print("usage: pipreqs.py REQ_FILE [PIP_ARGS]") 
    else: 
     import pip 
     retcode = 0 
     with open(filename, 'r') as f: 
      for line in f: 
       pipcode = pip.main(['install', line.strip()] + argv) 
       retcode = retcode or pipcode 
     return retcode 
if __name__ == '__main__': 
    import sys 
    sys.exit(main(sys.argv[1:])) 

który można nazwać jak pipreqs.py requirements.txt --some --other --pip --args.

Należy zauważyć, że dotyczy to tylko motta "kontynuuj pomimo awarii" o jeden poziom głębokości - jeśli pip nie może zainstalować podrzędnego wymogu czegoś na liście, to oczywiście wymaganie rodzica nadal będzie nieskuteczne.

+0

Dzięki, wydaje się, że to działa. Istnieje jednak denerwujący efekt uboczny: komunikaty dziennika z potoku wydają się duplikować (i potrójnie, itd.) Im więcej pakietów znajduje się w pliku wymagań. Jest to prawdopodobnie problem z instancją rejestratora. – dangonfast

25

Mam ten sam problem. nadal na linii @Greg Haskins, może to atakujących jedna wkładka jest bardziej zwięzły:

cat requirements.txt | while read PACKAGE; do pip install "$PACKAGE"; done 

# TODO: extend to make the script print a list of failed installs, 
# so we can retry them. 

(dla non-shellscripters: wywołuje pip install dla każdego z wymienionych pakietów)

takie same uwaga na temat awarii zależy oczywiście od tego!

Powiązane problemy