it-swarm.dev

Uaktualnij pakiety Pythona z wymagania.txt za pomocą polecenia pip

Jak uaktualnić wszystkie moje pakiety Pythona z pliku requirements.txt za pomocą polecenia pip?

próbował z poleceniem poniżej

$ pip install --upgrade -r requirements.txt

Odkąd pakiety pythona są uzupełnione numerem wersji (Django==1.5.1), nie wydają się uaktualnić. Czy istnieje lepsze podejście niż ręczna edycja pliku requirements.txt?

EDYTOWAĆ

Jak wspomniał Andy w swoich pakietach odpowiedzi, są przypięte do konkretnej wersji, dlatego nie jest możliwe uaktualnienie pakietów za pomocą polecenia pip.

Ale możemy to osiągnąć za pomocą pip-tools, używając następującej komendy.

$ pip-review --auto

spowoduje to automatyczne uaktualnienie wszystkich pakietów z wymagań.txt (upewnij się, że zainstalowałeś pip-tools za pomocą polecenia pip install).

64
abhiomkar

Nie. Plik wymagań został przypięty do określonych wersji. Jeśli twoje wymagania są ustawione na tę wersję, nie powinieneś próbować uaktualnić poza te wersje. Jeśli potrzebujesz uaktualnić, musisz przełączyć się na niepodpisane wersje w pliku wymagań.

Przykład:

lxml>=2.2.0

Uaktualniłoby to lxml do dowolnej wersji nowszej niż 2.2.0

lxml>=2.2.0,<2.3.0

Uaktualniłoby to lxml do najnowszej wersji między 2.2.0 a 2.3.0.

28
Andy

Już odpowiedziałem na to pytanie tutaj . Oto moje rozwiązanie:

Ponieważ nie było łatwego sposobu na aktualizację pakietu po pakiecie i aktualizację pliku wymagania.txt, napisałem ten pip-upgrade = która aktualizuje również wersje w twoim pliku requirements.txt dla wybranych pakietów (lub wszystkich pakietów).

Instalacja

pip install pip-upgrader

Wykorzystanie

Aktywuj virtualenv (ważne, ponieważ zainstaluje również nowe wersje uaktualnionych pakietów w bieżącym virtualenv).

cd do katalogu projektu, a następnie uruchom:

pip-upgrade

Zaawansowane użycie

Jeśli wymagania są umieszczone w niestandardowej lokalizacji, prześlij je jako argumenty:

pip-upgrade path/to/requirements.txt

Jeśli już wiesz, jaki pakiet chcesz zaktualizować, po prostu wyślij je jako argumenty:

pip-upgrade -p Django -p celery -p dateutil

Jeśli musisz zaktualizować do wersji przedpremierowej/po wydaniu, dodaj do polecenia argument --prerelease.

Pełne ujawnienie: Napisałem ten pakiet.

55

możesz spróbować:

pip install --upgrade --force-reinstall -r requirements.txt

Możesz także zignorować zainstalowany pakiet i zainstalować nowy:

pip install -I, --ignore-installed -r requirements.txt
46
Freelancer

Ponieważ nie mogłem tego zrobić za pomocą basha, napisałem moduł Pythona, aby utworzyć nowy plik wymagań bez wersji i używać go:

data = open('requirements-prod.pip', 'r')
data2 = open('requirements-prod-no-version.pip', 'w')
for line in data.readlines():
    new_line = line[:line.index('==')]
    data2.write(new_line + '\n')
data2.flush()

Następnie zainstaluj biblioteki z nowego pliku pip install -U -r requirements-prod-no-version.pip

Wreszcie zamrozić wersje do oryginalnego pliku pip freeze > requirements-prod.pip

2
Montaro