Почему pip устанавливает старую версию моего пакета?

Я только что загрузил новую версию своего пакета в PyPi (1.2.1.0-r4): я могу загрузить файл яйца и установить его с помощью easy_install, и версия проверяется правильно. Но когда я пытаюсь установить с помощью pip, вместо этого он устанавливает версию 1.1.0.0. Даже если я явно укажу версию на pip с помощью pip install -Iv tome==1.2.1.0-r4, я получаю это сообщение: Requested tome==1.2.1.0-r4, but installing version 1.1.0.0, но я не понимаю, почему.

Я дважды проверил с помощью parse_version и подтвердил, что строка версии 1.2.1 больше, чем на 1.1.0, как показано ниже:

>>> from pkg_resources import parse_version as pv
>>> pv('1.1.0.0') < pv('1.2.1.0-r4')
True
>>>

Значит, любая идея, почему он выбирает вместо этого установку 1.1.0?

Ответ 1

Это отличный вопрос. Мне потребовалось бесконечно, чтобы понять. Это решение, которое работает для меня:

По-видимому, если pip может найти локальную версию пакета, pip предпочитает локальные версии для удаленных. Я даже отключил свой компьютер от Интернета и попробовал его снова - когда pip все еще успешно установил пакет и даже не пожаловался, источник был явно локальным.

На самом деле запутанная часть, в моем случае, заключалась в том, что pip нашли более новые версии на pypi, сообщили им, установленная старая версия в любом случае... arggh. Кроме того, он не сказал мне, что он делает, и почему.

Итак, как я решил эту проблему?

Вы можете получить pip, чтобы предоставить подробный вывод, используя флаг -v... но одного недостаточно. Я RTFM-ed помощь, в которой говорилось, что вы можете сделать -v несколько раз, до 3x, для более подробного вывода. Итак, я сделал:

pip install -v -v -v <my_package>

Затем я просмотрел вывод. Одна линия привлекла мое внимание:

Источник в/tmp/pip-build-root/имеет версию 0.0.11, которая удовлетворяет требованию <my_package >

Я удалил этот каталог, после которого pip установил самую новую версию из pypi.

Ответ 2

Благодаря Маркусу Смиту, который делает потрясающую работу в качестве основного производителя, это было исправлено в версии 1.4 пипса, которая была выпущена в 2013 году -07-23.

Соответствующая информация из changelog для этой версии

Исправлено несколько проблем (# 413, # 709, # 634, # 602 и # 939), связанных с очистка и повторное использование каталогов сборки. (Pull # 865, # 948)

Ответ 3

Я нашел здесь, что есть известная ошибка в пипе, которая не проверяет версию, если есть каталог сборки с распакованными источниками. Я проверил это на своем тревожном пакете и после удаления его источников из каталога сборки установил нужную версию.

Ответ 4

Если вы используете версию pip, которая поставляется с некоторыми дистрибутивными пакетами (например, Ubuntu python-pip), вам может потребоваться установить более новую версию pip:

Обновить pip до последней версии:

sudo pip install -U pip

В случае "virtualenv" пропустите "sudo":

pip install -U pip

Может потребоваться следующая команда, если ваша оболочка сообщит о чем-то вроде -bash: /usr/bin/pip: No such file or directory после pip update:

hash -d pip

Теперь установите пакет как обычно:

pip install -U foo

или

pip install foo==package.version.here

Ответ 5

Получена та же проблема для обновления pika 0.9.5 до 0.9.8. Единственный рабочий путь - установить из tarball: pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz.

Ответ 6

Попробуйте снова загрузить пакет:

pip install --no-cache-dir --upgrade <package>