Почему 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>