Оновіть пакети python з вимог.txt за допомогою команди pip


111

Як оновити всі мої пакети python до файлу вимоги.txt за допомогою команди pip?

спробував із командою нижче

$ pip install --upgrade -r requirements.txt

Оскільки пакети python суфіксируються з номером версії ( Django==1.5.1), вони, схоже, не оновлюються. Чи є кращий підхід, ніж вручну редагувати файл вимоги.txt?

EDIT

Як Енді згадував у своїх відповідях, пакети прикріплюються до певної версії, отже, оновити пакети неможливо за допомогою команди pip.

Але ми можемо досягти цього за pip-toolsдопомогою наступної команди.

$ pip-review --auto

це автоматично оновить усі пакети з вимог.txt (переконайтеся, що встановити pip-toolsза допомогою команди pip install).


7
Pip-tools чудово працює - оновлений синтаксис є pip-compile -U requirements.txt.
erikreed

Відповіді:


40

Ні. Ваш файл вимог був прив’язаний до конкретних версій. Якщо ваші вимоги встановлені до цієї версії, вам не слід намагатися оновити її понад ці версії. Якщо вам потрібно оновити, то вам потрібно перейти на незакріплені версії у вашому файлі вимог.

Приклад:

lxml>=2.2.0

Це дозволить оновити lxml до будь-якої версії, більш нової, ніж 2.2.0

lxml>=2.2.0,<2.3.0

Це дозволило б оновити lxml до останньої версії між 2.2.0 та 2.3.0.


2
Мені було корисно зробити наступне. 1. Видалений venv 2. Створений новий з такою ж назвою (спосіб очищення всіх пакетів файлів) 3. Замініть всі == на> = у
вимогах.txt

sed 's/==/>=/g' requirements.txt > TMP_FILE && mv TMP_FILE requirements.txt замінить усіх ==на>=
philshem

80

Ви можете спробувати:

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

Ви також можете проігнорувати встановлений пакет та встановити новий:

pip install --ignore-installed -r requirements.txt

2
при такому варіанті, здається, перевстановити ту саму версію. Як Енді згадував у відповіді вище, пакети прикріплюються до певної версії.
abhiomkar

@abhiomkar ти rigth Я думав, що ти хочеш знову встановити ту саму версію (можливо, щоб додати поправку на посилання)
Фрілансер

1
Друга команда - це те, що я шукав. Зауважте, що це -Iі --ignore-installedє ті самі прапори, і, звичайно, не вірно мати ,там. Таким чином, пониження не відбудеться під час встановлення та після завершення установки вимог можна оновити встановлені пакети за допомогою pip-review --auto.
AXO

79

Я вже відповідав на це питання тут . Ось моє рішення:

Оскільки не було простого способу оновлення пакета до пакету та оновлення файла вимог.txt , я написав цей підшивач, який також оновлює версії у вашому requirements.txtфайлі для вибраних пакетів (або всіх пакетів).

Установка

pip install pip-upgrader

Використання

Активуйте свій virtualenv (важливо, оскільки він також встановить нові версії оновлених пакетів у поточному virtualenv).

cd у свій каталог проектів, а потім запустіть:

pip-upgrade

Розширене використання

Якщо вимоги розміщені у нестандартному місці, надішліть їх як аргументи:

pip-upgrade path/to/requirements.txt

Якщо ви вже знаєте, який пакет ви хочете оновити, просто надішліть їх як аргументи:

pip-upgrade -p django -p celery -p dateutil

Якщо вам потрібно оновити до версії до випуску / після випуску, додайте --prereleaseаргумент до своєї команди.

Повне розкриття: я написав цей пакет.


5
Чудово! Дивно, що така функція безпосередньо в pip
відсутня

5
Елегантний! Супер-рада, що я прокрутився до цього: P
PulseJet

3
Я щойно це використав, і це найкраще з f-струн.
Pierre.Sassoulas

1
Чудовий інструмент. Дякую.
mszaro

Дуже корисний інструмент! Я також знайшов ще один пакет під назвою pur, який також оновлює прикріплені версії
Gal

4

Я пропоную заморозити всі ваші залежності, щоб мати передбачувані нарощування .

Роблячи це, ви можете оновлювати всі залежності одразу так:

sed -i '' 's/==/>=/g' requirements.txt
pip install -U -r requirements.txt
pip freeze > requirements.txt

Зробивши вище, перевірити свій проект з новим набором пакетів і в кінцевому підсумку зробити на requirements.txtфайл в сховище.


3

Я просто повинен був зробити те ж саме ... використав цей невеликий одноколісний лайнер, щоб виконати цю роботу:

packages=$(cat requirements.txt | sed 's/==.*//g'); echo $packages | xargs pip3 install -U; freeze=$(pip3 freeze); for p in $(echo $packages); do echo $freeze | grep -E "^${p}==" >> requirements.new; done

котрий:

  • packages=$(cat requirements.txt | sed 's/==.*//g') створює список імен поточних пакетів у вимовах.txt (видалення версії).
  • echo $packages | xargs pip3 install -U потім передає всі пакети як аргументи до pip3 для оновлення.
  • freeze=$(pip3 freeze); Отримує всі поточні версії пакету у форматі, необхідному для вимог.txt
  • for p in $(echo $packages) потім повторюється через назви пакетів
    • echo $freeze | grep -E "^${p}==" >> requirements.new отримує рядок версії пакета з виводу заморожування pip, який відповідає пакету і записує нові вимоги.txt

Це має додаткову перевагу від збереження впорядкування вихідних вимог.txt. :)

Сподіваюся, це допомагає!


2

Оскільки я не міг цього зробити за допомогою bash, я написав модуль python, щоб створити новий файл вимог без версій і використовувати його:

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()

Потім встановіть libs з нового файлу pip install -U -r requirements-prod-no-version.pip

Нарешті заморожте версії до вихідного файлу pip freeze > requirements-prod.pip


2

Іншим рішенням є використання пакета вимог до оновлення

pip install upgrade-requirements

А потім запустіть:

upgrade-requirements

Він оновить усі пакунки, які не є в їх останніх версіях, а також створить оновлений вимоги.txt наприкінці.


0
  • 1) Для оновлення файлів, встановлених на pip, з reqs.txt, додайте > = замість == це дозволить pip встановити lib, що перевищує або дорівнює тій версії, яку ви запитуєте, тут, встановивши найновішу версію запитуваної бібліотеки

    1.a) ** Моя відповідь за потік ** Додаючи py -m pip install -r reqs.txt до щоденного перезавантаження ... або щось подібне, ви можете оновити встановлені ваги. Підсумував Енді Прекрасно

    -Моєю причиною Введення цього потоку було знайти інформацію про те, як оновити віртуальний базовий піп-код env (як правило, 10,0.03 для мене ??)

в надії задовольнити питання, з якого я зміг отримати одне з двох рішень

A. створення venv || B. Встановлення необхідних петель

Завдяки Енді я задовольнив потребу B

Додавши pip > = запитувана версія в reqs.txt

при створенні нового віртуального середовища || відновлення попереднього Venv

  1. py -m venv devenv

налаштувати новий dev env

  1. гevenv\scripts\activate.bat

щоб активувати dev env

  1. python -m pip install -r requirenments.txt

встановити базові вкладки

yeilds вихід

Збір pip > = 20.0.2 (з -r requirenments.txt (рядок 1)) Використання кешованого> https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/3ppy/pip/pip-20/pyppy/pip/pip-20/pyppy/pip/pip-20/pyppy/pip/pyp-20/pp жоден-будь-який.whl

Знайдена існуюча установка: pip 10.0.1

Видалення pip-10.0.1:

 Successfully uninstalled pip-10.0.1
 Successfully installed pip-20.0.2

Вибачте за мозковий смітник, сподіваюся, що це комусь допоможе :)

🤳 Остін 👨‍🎤🚀🥊


0

Друга відповідь є найкориснішою, але те, що я хотів зробити, це заблокувати деякі пакунки, а інші мати найновішу версію (наприклад, youtube-dl).

Приклад requirements.txtвиглядає так (~ означає сумісний):

Pillow==6.2.2
requests~=2.22.0
youtube_dl

Потім в терміналі використовуйте команду pip install --upgrade -r requirements.txt

Це гарантує, що Подушка залишиться на рівні 6.2.2, запити будуть оновлені до останньої 2.22.x (якщо є), а найновіша версія youtube-dl буде встановлена, якщо її ще немає.


0

Я думаю, найпростішим рішенням є створення вимог.txt за допомогою:

pip freeze | sed 's/==/>=/' > requirements.txt

-1

Якщо ви встановите що-небудь у своєму проекті django, і після встановлення ви хочете оновити файл своєї вимоги, ця команда може оновити файл вимоги.txt pip freeze> требования.txt

якщо у вашому проекті відсутній файл вимог, ви можете використовувати цю команду для створення нового файла вимоги.txt pip freeze> вимоги.txt


це погана ідея, тому що вона також додасть вимоги до всіх ваших вимог, в результаті чого вийде непотрібно великий файл вимог. Якщо ви вирішите оновити єдину залежність, ви, швидше за все, отримаєте конфлікти версій, якщо ви не знаєте, які інші вимоги були додані до файлу ваших вимог через цей пакет.
заворушився

-10

Я редагую вимоги.txt, як показано нижче, і запускаю $ sh ./requirements.txt

pip install -U amqp;
pip install -U appdirs;
pip install -U arrow;
pip install -U Babel;
pip install -U billiard;
pip install -U celery;
pip install -U Django;
pip install -U django-cors-headers;
pip install -U django-crispy-forms;
pip install -U django-filter;
pip install -U django-markdown-deux;
pip install -U django-pagedown;
pip install -U django-timezone-field;
pip install -U djangorestframework;
pip install -U fcm-django;
pip install -U flower;
pip install -U gunicorn;
pip install -U kombu;
pip install -U Markdown;
pip install -U markdown2;
pip install -U packaging;

3
Це ідеальний приклад анти-візерунка. Що тут не так: 1) патрабавання.txt - це .txt файл, але ви зробили його виконуваним 2). Існує проста команда встановлення піп -r вимоги.txt. Таким чином, ви можете використовувати файл вимоги.txt лише для переліку залежностей від вашого проекту. 3) Ви не використовуєте версії пакетів. 4) Це не звичайна модель, інші розробники не мають нічого про те, як нею користуватися. 5) Важкий у використанні з трубопроводами CI / CD. Не використовуйте цей приклад
Fannigurt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.