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

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

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

Ответы [ 7 ]

1146 голосов
/ 04 мая 2012

Я выполнил следующую команду, и она обновилась с 1.2.3 до 1.4.0

pip install Django --upgrade

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

pip install Django -U

Примечание : еслиВ пакете, который вы обновляете, есть какие-либо требования, эта команда дополнительно обновит все требования до последних доступных версий.В последних версиях pip, вы можете предотвратить это, указав --upgrade-strategy only-if-needed.С этим флагом зависимости не будут обновляться, если только установленные версии зависимых пакетов больше не будут соответствовать требованиям обновленного пакета.

53 голосов
/ 03 января 2011

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

<virtualenv>/bin/pip uninstall Django

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

<virtualenv>/bin/pip install Django

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

48 голосов
/ 07 января 2015

согласно пунктам документы пример 3

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

30 голосов
/ 31 августа 2014

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

pip install Django --upgrade

Является:

pip install Django -U
14 голосов
/ 30 ноября 2016

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

11 голосов
/ 27 апреля 2017

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

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

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

4 голосов
/ 04 мая 2012

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

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

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

...