Чому pip встановлює стару версію мого пакета?


80

Я щойно завантажив нову версію мого пакету на PyPi (1.2.1.0-r4): я можу завантажити файл і встановити його за допомогою easy_install, і версія перевіряється правильно. Але коли я намагаюся встановити за допомогою pip, він встановлює натомість версію 1.1.0.0. Навіть якщо я явно вказав версію, з якою 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?


Не вдалося відтворити. pip install -Iv tome==1.2.1.0-r4встановлює для мене (відповідно до повідомлень та pip freezeпакету tome==1.2.1.0-r4.
Девід Робінсон,

Це, мабуть, ще десь на вашому шляху? Спробуйте за допомогою-U
Wolph

Хм .. добре, це цікаво. Я спробував видалити його за допомогою pip, мабуть, мені доведеться ще перекопати і переконатися, що все це зникло. Дякуємо за перевірку!
brianmearns

Схоже на якусь помилку в pip. У мене схожа проблема, але я не можу встановити стару версію django-tastypie.
simplelizz 03.03.13

Відповіді:


95

Це відмінне запитання. Мені знадобилося вічно це зрозуміти. Це рішення, яке мені підходить:

Очевидно, якщо pipвдасться знайти локальну версію пакету, pipвіддасть перевагу локальній версії перед віддаленою. Я навіть відключив свій комп’ютер від Інтернету і спробував ще раз - коли pipвсе-таки встановив пакет успішно, і навіть не скаржився, джерело було очевидно місцевим.

У моєму випадку справді заплутаною частиною було те, pipщо нові версії знайшли на pypi , повідомили про них, а потім продовжили і все-таки перевстановили стару версію ... arggh. Крім того, це не сказало мені, що це робить, і чому.

То як я вирішив цю проблему?

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

pip install -vvv <my_package>

Потім я переглянув результати. Мені привернув увагу один рядок:

Джерело в / tmp / pip-build-root / має версію 0.0.11, яка задовольняє вимогу <my_package>

Я видалив цей каталог, після чого pipвстановив найновішу версію з pypi.


Схоже, це ще не виправлено.
Ale

1
@ Ale110 Виправлено - детальніше див. Мою відповідь.
Piotr Dobrogost

5
FYI ви можете використовувати -vvvзамість -v -v -v.
bfontaine 02

3
Ви також можете використовувати --no-cache-dirпрапор замість того, щоб шукати і видаляти файл у /tmp/.
ethanabrooks

41

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

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

1
Це спрацювало для мене. Нарешті отримали v0.4 з фотоутилів, встановлених над v0.2.1. Pip завантажував v0.4 tar, але тоді він просто встановлював (або зберігав) v0.2.1. Прапорці --no-cache-dir та --upgrade нарешті зробили це! Дякую
scibuff

4
Це правильна відповідь тут. Pip за замовчуванням зберігає кеш відповідної сторінки Pypi протягом 600 секунд. Отже, навіть якщо ви видалите локально кешований пакет, вам доведеться почекати 10 хвилин, поки pip отримає нову сторінку з усіма посиланнями на нову версію.
brthornbury

1
Це здається цілком логічною відповіддю. Однак установка pip все одно отримує ту саму стару версію, хоча версія, яку я бачу, pip searchє новішою.
Mavamaarten

1
Спробуйте перевірити, чи це щось за допомогою virtualenv. Ах версії python.
Iacchus

25

Завдяки Маркусу Сміту , який чудово працює як керівник pip, це було виправлено у версії 1.4 pip, яка вийшла 23 липня 2013 року.

Відповідна інформація з журналу змін для цієї версії

Виправлена ​​низка проблем (# 413, # 709, # 634, # 602 та # 939), пов'язаних з очищенням та не повторним використанням каталогів збірки. (Потягніть # 865, # 948)


5
Це слід позначити як правильну відповідь. Оновіть піп так:pip install -U pip
Emil Stenström

2
Це виправлення ще не адреса піп мовчки , використовуючи версію кешируєтся, яка може бути вирішена з допомогою відповіді Іаого в
Burrito

1
Ні, здається, це не виправлено. Зараз я стикаюся з тією ж проблемою.
Регіс,

17

Я знайшов тут , що є відома помилка в піпе , що він не буде перевіряти версію , якщо є каталог для збирання з розпакованими джерелами. Я перевірив це на своєму тривожному пакеті, і після видалення його джерел з каталогу побудови pip встановив необхідну версію.


2
Спасибі за інформацію. Будь-яка ідея, де мені слід шукати каталог побудови? Я спробував видалити його з Python \ Lib \ site-пакети, але результати були однаковими. Я не виконую команду з місця, де існує пакет чи щось інше.
brianmearns

@ sh1ftst0rm Я використовую virtualenv під Linux, а для django-tastypie це було: "$ VIRTUAL_ENV / build / django-tastypie". Спробуйте перевірити верхню частину каталогу Python або просто використовуйте пошук у вашій системі. Також ви можете спробувати скористатися "pip install -b <шлях до власного каталогу збирання>".
simplelizz

1
Це, здається, не моя проблема, я шукав далеко і широко, і не можу знайти жодного сліду пакету або каталогу збірки для нього в своїй системі. Це має бути якась інша помилка в pip = (. Хороша порада в будь-якому випадку, я впевнений, що це буде виправлення для багатьох людей.
brianmearns

9

Якщо ви використовуєте 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


6

Отримав ту саму проблему, щоб оновити pika 0.9.5 до 0.9.8. Єдиний робочий спосіб був встановити з архіву: pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz.


2
+1 Дякую, це зачепило мене за щось важливе: pip покладається на вихідні дистрибутиви: з моєю останньою версією я забув завантажити вихідний дистрибутив, тому при спробі встановити він отримає лише попередню версію. Це не вирішує моєї початкової проблеми, але корисно знати.
brianmearns

1

У моєму випадку мені довелося видалити .pipпапку в домашньому каталозі, а потім я зміг отримати пізніші версії декількох бібліотек. Зверніть увагу, що це було на Linux.

pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
virtualenv --version
15.1.0

0

Я виявив, що якщо ви використовуєте мікроверсії, pip, здається, не розпізнає їх. Наприклад, нам не вдалось отримати версію 1.9.9.1 для оновлення.


2
може тому, що '1.9.9.1' не сумісний з SemVer, див. semver.org
tector

0

У моєму випадку використана версія python (3.4) не задовольняла вимоги до залежностей Django 2.1 (python> = 3.5).


0

У моєму випадку я встановлюю пакет .tar.gz з Artifactory, до якого я вношу багато оновлень. Для того, щоб перезаписати кешовані файли Python і завжди захоплювати / встановлювати останнє, що я зміг запустити:

pip install --no-cache-dir --force-reinstall <path/to/tar.gz>

Ви повинні побачити це повторне завантаження всіх необхідних файлів та їх встановлення, замість використання локального кешу.


0

У моєму випадку, хто - то опублікував останню версію пакета з python2, тому спроба pip3 installйого схопив стару версію , яка була була побудована з Python3.

Корисні речі для перевірки при налагодженні цього:

  • Якщо pip installзаявляєте, що не можете знайти версію, подивіться, чиpip search можна її побачити.
  • Погляньте на розділ "Завантажити файли" на репозиторії pypi - імена файлів можуть підказувати, що сталося (у моєму випадку я бачив -py2- там, як день).
  • Як пропонують інші, спробуйте запустити pip install --no-cache-dirна випадок, якщо pip не заважає запитати в Інтернеті, оскільки у вас вже є ваша відповідь локально.

0

Я заховав безверсійні файли на вкладці Git у PyCharm, які встановлювались pip install . хоча я їх ніде не бачив.

Довго шукав це для мене, публікуючи це в надії, що це допоможе комусь іншому.


0

Про всяк випадок, коли хтось інший клопочеться з оновленням торчтексту (або, можливо, будь-якої іншої torchбібліотеки):

Хоча https://pypi.org/project/torchtext/ стверджує, що ви можете запустити, pip install torchtextмені довелося встановити його подібним torch, вказавши --find-linksaka -f:

pip install torchtext===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

Мене дратувало те, що PyCharm вказав мені нову версію, але не зміг її знайти при спробі оновити її. Я думаю, що PyCharm використовує власний механізм для виявлення нових версій. Потім, при зверненні pipпід капот, він не знайшов нової версії без --find-linksопції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.