Як я можу оновити конкретні пакети, використовуючи файл pip та файл вимог?


436

Для моїх проектів Django я використовую файл pip з файлом вимог. Я намагаюся оновити деякі пакунки, зокрема сам Django, і я отримую помилку щодо конфліктів вихідного коду:

Source in `<virtualenv`>/build/Django has version 1.2.3 that conflicts with Django==1.2.4 (from -r requirements/apps.txt (line 3))

Це після оновлення номера версії Django з 1.2.3 до 1.2.4 у моєму файлі вимог. Я використовую цю команду, щоб фактично здійснити оновлення:

pip --install --upgrade -E `<virtualenv dir`> --requirement `<requirements file`>

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


1
Будь ласка, перевірте відповідь @ dr-jimbob, оскільки останні версії pip насправді покращать всі інші залежності, від яких залежить пакет, який ви оновляєте.
— Локеш Мехер

Відповіді:


61

Я не впевнений, що це точно ваша проблема, але в моєму випадку я не зміг оновити Django до 1.2.4 - я завжди закінчував версію 1.2.3, тому я видалив Django за допомогою:

<virtualenv>/bin/pip uninstall Django

Потім я видалив <virtualenv>/build/Djangoкаталог і, нарешті, встановив належну версію за допомогою:

<virtualenv>/bin/pip install Django

Сподіваюсь, це допоможе.


53
Це не найкраща практика. Використовуйте pip install Django -Uабо pip install Django --upgradeяк описано у відповіді @JoeyG.
— Ахмад

@Ahmad погоджуюсь. Повинен бути плавний процес оновлення в pip та віртуальній середовищі.
— Parth Joshi

1271

Я запустив таку команду, і вона модернізувалась з 1.2.3 до 1.4.0

pip install Django --upgrade

Ярлик для оновлення:

pip install Django -U

Примітка : якщо пакет, який ви оновлюєте, має будь-які вимоги, ця команда додатково оновить усі вимоги до останніх наявних версій. В останніх версіях pip ви можете запобігти такій поведінці, вказавши--upgrade-strategy only-if-needed . За допомогою цього прапора залежності не буде оновлено, якщо встановлені версії залежних пакетів більше не відповідають вимогам оновленого пакету.


7
Це для мене оновило всі мої упаковані і повністю переплутало все !!!! Документи зазначають: - оновлення всіх пакетів до новітньої доступної версії. Це правильно чи я зробив щось не так?
— Прометей

4
@OrbiterFleet Мені потрібно було оновити "запити", тому я зробив pip install Requests --upgradeі лише "запити" було оновлено. В описі написано "оновити всі вказані пакети", коли я переглядаю документи.
— harperville

31
УВАГА, він також оновлює всі залежності і може зіпсувати все. найкращий варіант - видалити та перевстановити пакет.
— marcelosalloum

3
для оновлення конкретного використання пакетуpip install --upgrade django==1.4.0
— whale_steward

це має бути правильна відповідь відповідно до питання або саме питання неправильне.
— int soumen

51

згідно з документами pip, приклад 3

pip install --upgrade django

але виходячи з мого досвіду, використання цього методу також оновить будь-який пакет, пов'язаний з ним. приклад:

Припустимо, ви хочете оновити, somepackageщо потребує django >= 1.2.4використання цього методу, він також оновить somepackageІ djangoдо найновішого оновлення. Просто для безпечного виконання:

# assume you want to keep django 1.2.4
pip install --upgrade somepackage django==1.2.4

Це дозволить оновити somepackageта зберегти джанго до версії 1.2.4


Хороший улов, але ваше пояснення заплутане, оскільки ви почали з djangoосновного пакету, то в прикладі, який ви використовуєте, somepackageа потім використовуєте djangoяк залежність.
— Довгий

34

Команда швидкого доступу для --upgrade:

pip install Django --upgrade

Є:

pip install Django -U

7
Як щодо редагування наявної відповіді, щоб додати цю частину інформації замість (неповної) відповіді?
— а1ан

@ a1an, будь ласка, підкажіть, яку додаткову інформацію, на вашу думку, слід додати у "запропонованому редагуванні". Спасибі
— Аарон Лелев'є

4
Я маю на увазі, що ви можете відредагувати відповідь, надану JoeyG, додавши параметр швидкого доступу, який ви надали в контексті.
— a1an

17

Якщо ви оновите пакет, старий буде видалено.

Зручний спосіб зробити це - скористатися цим підсилювачем програм, який також оновлює версії у вашому 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аргумент до своєї команди.

Повне розкриття: я написав цей пакет. Сподіваюся, це допомагає.


1
чи є можливість оновити всі пакети одразу (тобто, не перераховуючи їх) за допомогою цього підходу?
— Вболівальник номер один Бьоркс

1
@MikePalmice так: pip-upgrade -p allоновить усі ваші пакети та файл вимог до оновлення, не вимагаючи від вас жодного вводу.
— Сіміон Агаврилоаей

15

Якщо ви хочете оновити лише один конкретний пакет, який називається somepackage, командою, яку ви повинні використовувати в останніх версіях pip, є

pip install --upgrade --upgrade-strategy only-if-needed somepackage

Це дуже корисно, коли ви розробили додаток у django, який наразі працюватиме лише з певною версією django (скажімо, Django = 1.9.x) і хочете оновити якийсь залежний пакет із виправленням помилок / новою функцією, і оновлений пакет залежить на django (але працює з скажімо будь-яку версію django після 1.5). Поводженням за замовчуванням pip install --upgrade django-some-packageбуло б оновлення django до останньої доступної версії, яка в іншому випадку може порушити вашу програму, хоча з --upgrade-strategy only-if-neededзалежними пакунками тепер буде модернізовано лише за необхідності.


4

Зазвичай, pip очиститься після себе та видалить вміст каталогу збирання. Єдиний раз, коли це не робиться, це якщо:

  1. Ви використовували --no-installваріант
  2. Ви використовуєте редаговані пакети
  3. Встановлення було скасовано або іншим чином було перервано.

У всіх інших випадках у вас не повинно бути buildкаталогу, який засмічує ваше оточення.


1

Визначення конкретної версії для оновлення допомогло мені замість лише команди оновлення.

pip3 install larapy-installer==0.4.01 -U

0

що вирішило для мене проблему "встановити pip -I - оновити psutil --force" після цього просто видаліть psutil з новою версією, і ви можете раптом встановити старішу версію (:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.