Як я можу оновити конкретні пакети, використовуючи файл 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.