Как я могу обновить определенные пакеты, используя pip и файл требований?


437

Я использую pip с файлом требований в virtualenv для своих проектов Django. Я пытаюсь обновить некоторые пакеты, особенно сам 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.
Ахмад

@ Ахмад согласен. Должен быть плавный процесс обновления в pip и виртуальной среде.
Парт Джоши

1274

Я выполнил следующую команду, и она обновилась с 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

согласно пип документации, пример 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и сохранить django до версии 1.2.4.


Хороший улов, но ваше объяснение сбивает с толку, поскольку вы начали с djangoосновного пакета, а затем с примера, который вы используете, somepackageа затем используете djangoкак зависимость.
Лонг

34

Комбинация команд для --upgrade:

pip install Django --upgrade

Является:

pip install Django -U

7
Как насчет редактирования существующего ответа, чтобы добавить этот бит информации вместо (неполного) ответа?
A1An

@ a1an, пожалуйста, предложите, какую дополнительную информацию, по вашему мнению, следует добавить в «предлагаемое изменение». Спасибо
Аарон Лельвье

4
Я имею в виду, что вы можете отредактировать ответ, данный JoeyG, добавив опцию ярлыка, которую вы предоставили в контексте.
A1An

17

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

Удобный способ сделать это - использовать этот pip-upgrade, который также обновляет версии в вашем 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
есть ли возможность обновить все пакеты одновременно (т.е. без их перечисления) с помощью этого подхода?
Bjorks номер один фанат

1
@MikePalmice yes: pip-upgrade -p allобновит все ваши пакеты и обновит файл требований без какой-либо информации от вас.
Simion Agavriloaei

16

Если вы хотите обновить только один конкретный пакет с именем 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 install -I --upgrade psutil --force", после чего просто удалите psutil с новой версией и надеюсь, что вы можете внезапно установить старую версию (:


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.