Jak zaktualizować wszystkie moje pakiety Pythona z pliku Requirements.txt za pomocą polecenia pip?
próbował z poniższym poleceniem
$ pip install --upgrade -r requirements.txt
Ponieważ pakiety Pythona mają przyrostek z numerem wersji ( Django==1.5.1
), nie wydają się aktualizować. Czy jest lepsze podejście niż ręczna edycja pliku Require.txt?
EDYTOWAĆ
Jak wspomniał Andy w swojej odpowiedzi, pakiety są przypięte do konkretnej wersji, stąd nie jest możliwe uaktualnienie pakietów za pomocą polecenia pip.
Ale możemy to osiągnąć za pip-tools
pomocą następującego polecenia.
$ pip-review --auto
spowoduje to automatyczną aktualizację wszystkich pakietów z Requirements.txt (pamiętaj, aby zainstalować pip-tools
za pomocą polecenia pip install).
python
pip
packages
requirements.txt
abhiomkar
źródło
źródło
pip-compile -U requirements.txt
.Odpowiedzi:
Nie. Twój plik wymagań został przypięty do określonych wersji. Jeśli Twoje wymagania są ustawione na tę wersję, nie powinieneś próbować aktualizować poza te wersje. Jeśli potrzebujesz aktualizacji, musisz przełączyć się na nieprzypięte wersje w pliku wymagań.
Przykład:
Spowoduje to uaktualnienie lxml do dowolnej wersji nowszej niż 2.2.0
Spowoduje to uaktualnienie lxml do najnowszej wersji między 2.2.0 a 2.3.0.
źródło
sed 's/==/>=/g' requirements.txt > TMP_FILE && mv TMP_FILE requirements.txt
zastąpi wszystko==
z>=
możesz spróbować:
Możesz także zignorować zainstalowany pakiet i zainstalować nowy:
źródło
-I
i--ignore-installed
są tymi samymi flagami i oczywiście nie można mieć,
tam znaku. W ten sposób podczas instalacji nie nastąpi obniżenie wersji, a po zakończeniu instalacji wymagań można zaktualizować zainstalowane pakiety za pomocąpip-review --auto
.Odpowiedziałem już na to pytanie tutaj . Oto moje rozwiązanie:
Ponieważ nie było łatwego sposobu na aktualizację pakietu po pakiecie i aktualizację pliku Requirements.txt , napisałem ten pip-upgrader, który również aktualizuje wersje w twoim
requirements.txt
pliku dla wybranych pakietów (lub wszystkich pakietów).Instalacja
Stosowanie
Aktywuj virtualenv (ważne, ponieważ zainstaluje również nowe wersje zaktualizowanych pakietów w bieżącym virtualenv).
cd
do katalogu projektu, a następnie uruchom:Zaawansowane użycie
Jeśli wymagania są umieszczone w niestandardowej lokalizacji, prześlij je jako argumenty:
Jeśli wiesz już, jaki pakiet chcesz zaktualizować, po prostu wyślij je jako argumenty:
Jeśli chcesz zaktualizować do wersji przedpremierowej / popremierowej, dodaj
--prerelease
argument do polecenia.Pełne ujawnienie: napisałem ten pakiet.
źródło
Proponuję zamrozić wszystkie twoje zależności, aby mieć przewidywalne kompilacje .
Robiąc to, możesz zaktualizować wszystkie zależności naraz w następujący sposób:
Po wykonaniu powyższych przetestować swój projekt z nowym zestawem pakietów i ostatecznie popełnić ten
requirements.txt
plik do repozytorium.źródło
Po prostu musiałem zrobić to samo ... użyłem tego małego, jednowierszowego, aby wykonać zadanie:
który:
packages=$(cat requirements.txt | sed 's/==.*//g')
tworzy listę aktualnych nazw pakietów w plikach Requirements.txt (usuwa wersję).echo $packages | xargs pip3 install -U
następnie przekazuje wszystkie pakiety jako argumenty do pip3 w celu aktualizacji.freeze=$(pip3 freeze);
Pobiera wszystkie bieżące wersje pakietów w formacie wymaganym dla Requirements.txtfor p in $(echo $packages)
następnie dokonuje iteracji po nazwach pakietówecho $freeze | grep -E "^${p}==" >> requirements.new
pobiera wiersz wersji pakietu z danych wyjściowych pip freeze, który pasuje do pakietu i zapisuje w nowym pliku Requirements.txtMa to dodatkową zaletę w postaci zachowania kolejności w oryginalnym pliku Requirements.txt. :)
Mam nadzieję że to pomoże!
źródło
Ponieważ nie mogłem tego zrobić za pomocą basha, napisałem moduł Pythona, aby utworzyć nowy plik wymagań bez wersji i użyć go:
Następnie zainstaluj biblioteki z nowego pliku
pip install -U -r requirements-prod-no-version.pip
Na koniec zamroź wersje do oryginalnego pliku
pip freeze > requirements-prod.pip
źródło
Innym rozwiązaniem jest użycie pakietu aktualizacji wymagań
A potem biegnij:
Zaktualizuje wszystkie pakiety, które nie są w najnowszych wersjach, a na końcu utworzy zaktualizowany plik Requirements.txt.
źródło
1) Aby zaktualizować zainstalowane pliki pip z reqs.txt, dodaj > = w miejsce == spowoduje to, że pip zainstaluje bibliotekę większą lub równą żądanej wersji, tutaj instalując najnowszą wersję żądanej biblioteki
1.a) ** Moja odpowiedź na wątek ** Dodając
py -m pip install -r
reqs.txt do codziennego restartu ... lub czegoś podobnego, możesz zaktualizować zainstalowane biblioteki. Podsumował Andy Perfectly-Moim powodem wejścia w ten wątek było znalezienie informacji jak zaktualizować wirtualny pip bazowy env (zwykle 10.0.03 dla mnie ??)
w nadziei na rozwiązanie problemu, z którego udało mi się wyprowadzić jedno z dwóch rozwiązań
Dzięki Andy'emu zaspokoiłem potrzebę B.
Dodając pip > = żądaną wersję w reqs.txt
po utworzeniu nowego środowiska wirtualnego || ponowna instancja poprzedniego Venv
py -m venv devenv
aby skonfigurować nowe środowisko deweloperskie
evenv\scripts\activate.bat
aktywować dev env
python -m pip install -r requirenments.txt
aby zainstalować biblioteki podstawowe
wyjście yeilds
Przepraszamy za wysypisko mózgu, mam nadzieję, że to komuś pomoże :)
🤳 Austin 👨🎤🚀🥊
źródło
Druga odpowiedź jest najbardziej użyteczna, ale chciałem zablokować niektóre pakiety, a inne mieć w najnowszej wersji (np. Youtube-dl).
Przykład
requirements.txt
mógłby wyglądać następująco (~ oznacza zgodność):Następnie w terminalu użyj polecenia
pip install --upgrade -r requirements.txt
Gwarantuje to, że Pillow pozostanie na 6.2.2, żądania zostaną zaktualizowane do najnowszej wersji 2.22.x (jeśli jest dostępna), a najnowsza wersja youtube-dl zostanie zainstalowana, jeśli nie została jeszcze zainstalowana.
źródło
Myślę, że najprostszym rozwiązaniem jest utworzenie pliku Requirements.txt z:
źródło
Jeśli instalujesz cokolwiek w swoim projekcie django i po instalacji chcesz zaktualizować plik wymagań, to polecenie może zaktualizować plik wymaganie.txt pip freeze> Requirements.txt
jeśli twój plik wymagań nie istnieje w twoim projekcie, możesz użyć tego polecenia do tworzenia nowego pliku Require.txt pip freeze> Requirements.txt
źródło
Edytuję wymagania.txt jak poniżej i uruchamiam $ sh ./requirements.txt
źródło