Обновить пакет без обновления зависимостей с помощью pip? - PullRequest
45 голосов
/ 19 мая 2010

Я использую pip и virtualenv для своего приложения на python.Я хотел бы перейти на новую версию приложения, не затрагивая зависимости.Когда я использую pip install -U, он пытается обновить все пакеты, и даже удаляет и переустанавливает ту же версию пакета зависимостей, когда нет новой версии.

Я также попробовал pip install -U --no-deps, но это похоже на обычную установку вместо обновления.Есть ли комбинация флагов, которая будет делать то, что я хочу?

Ответы [ 3 ]

50 голосов
/ 21 мая 2010

Я только что попробовал свой проект virtualenv, и pip install -U --no-deps mypackage, кажется, работает нормально. Это просто скачать мой пакет и больше ничего. На что ты похож?

40 голосов
/ 04 января 2017

Обзор:

  • Установка новых пакетов без обновления установленных: pip install (без -U)
  • Обновлять только пакеты, которые устарели в соответствии с требованиями: pip install --upgrade --upgrade-strategy only-if-needed (по умолчанию в новых версиях)
  • Обновление пакета и всех зависимостей до последней версии: pip install --upgrade --upgrade-strategy eager (по умолчанию в старых версиях)
  • Установите или обновите перечисленные пакеты, не затрагивая зависимости: --no-deps

ОБНОВЛЕНИЕ (благодаря комментарию @ Jether): если вы используете последнюю версию pip, то обновление зависимостей только при необходимости теперь является поведением по умолчанию, и вам не нужно ничего делать специальный! Ответ ниже описывает шаги для более старых версий pip (который также работает для более новых версий, если вы хотите быть переносимым).

Если вы действительно хотите не трогать зависимости, тогда действительно стоит пойти по пути

pip install -U --no-deps mypackage

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

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

Это обновляет требования, только если пакет требует более новой версии, чем установлена.

4 голосов
/ 10 июня 2010

Ты прав. Я думал, что когда я добавил --no-deps, он пренебрег удалением существующей версии. Но я попробовал еще раз и вижу, что нет проблем:

$ pip install -U --no-deps myproj
Downloading/unpacking myproj
  Downloading myproj-1.0-trunk.31072.tar.gz (43Kb): 43Kb downloaded
  Running setup.py egg_info for package myproj
Installing collected packages: myproj
  Found existing installation: myproj 1.0-trunk.31053
    Uninstalling myproj:
      Successfully uninstalled myproj
  Running setup.py install for myproj
Successfully installed myproj
Cleaning up...
...