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

198

Я использую 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`>

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

  • 0
    Пожалуйста, проверьте ответ @ dr-jimbob, потому что последние версии pip фактически обновят все другие зависимости, от которых зависит пакет, который вы обновляете.
Теги:
pip
virtualenv

7 ответов

21
Лучший ответ

Я не уверен, что это именно ваша проблема, но в моем случае я не смог обновить Django до 1.2.4 - я всегда заканчивал версию 1.2.3, поэтому я удалил Django с помощью

<virtualenv>/bin/pip uninstall Django

Затем я удалил каталог <virtualenv>/build/Django и, наконец, я установил правильную версию с помощью:

<virtualenv>/bin/pip install Django

Надеюсь, это поможет.

  • 21
    Это не лучшая практика. Используйте pip install Django -U или pip install Django --upgrade как описано в ответе @JoeyG.
  • 1
    который является stackoverflow.com/a/10440459/7154924
717

Я выполнил следующую команду и обновил ее с 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 и были обновлены только «запросы». В описании написано «обновить все указанные пакеты» при просмотре документов.
Показать ещё 2 комментария
28

в соответствии с примером

pip install --upgrade django

но, основываясь на моем опыте, этот метод также будет обновлять любой связанный с ним пакет. Пример:

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

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

Выполнение этого будет обновлено somepackage и будет поддерживать django в версии 1.2.4

19

Команда ярлыка для --upgrade:

pip install Django --upgrade

Есть:

pip install Django -U
  • 5
    Как насчет редактирования существующего ответа, чтобы добавить этот бит информации вместо (неполного) ответа?
  • 0
    @ a1an, пожалуйста, предложите, какую дополнительную информацию, по вашему мнению, следует добавить в «предлагаемое изменение». Спасибо
Показать ещё 1 комментарий
2

Если вы хотите обновить только один пакет с именем 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 будут обновляться только по мере необходимости.

1

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

Удобный способ сделать это - использовать pip-upgrader, который также обновляет версии в вашем файле 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 в свою команду.

Полное раскрытие: я написал этот пакет. Надеюсь, что это поможет.

  • 0
    есть ли возможность обновить все пакеты одновременно (т.е. без их перечисления) с помощью этого подхода?
  • 0
    @MikePalmice да: pip-upgrade -p all обновит все ваши пакеты и обновит файл требований, не требуя от вас никаких действий.
1

Как правило, pip очищается после себя и удаляет содержимое каталога сборки. Единственный раз, когда он этого не делает, является:

  • Вы использовали опцию --no-install
  • Вы используете редактируемые пакеты
  • Установка была отменена или была прервана.

Во всех остальных случаях у вас не должно быть директории build, которая забивает вашу среду.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню