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


Я только что загрузил новую версию моего пакета в PyPi (1.2.1.0-r4): я могу загрузить файл egg и установить его с помощью 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 вместо этого?

8 59

8 ответов:

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

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

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

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

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

pip install -v -v -v <my_package>

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

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

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

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

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

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

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

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

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

если вы используете 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 обновление:

hash -d pip

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

pip install -U foo

или

pip install foo==package.version.here

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

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

в моем случае используемая версия python (3.4) не удовлетворяла требованиям зависимостей Django 2.1 (python >= 3.5).