Всем привет.
Сегодня столкнулся с проблемой, хотел откатить django-tastypie до пердыдущей версии, т.к. в новой половина тестов начала падать. Но тут меня ждал сюрприз — pip отказался ставить нужную версию пакета, при этом нагло заявляя в лицо: «вы просили версию X, но я поставлю Y».
Такое сообщение он выдал:
$ pip install django-tastypie==0.9.11
Downloading/unpacking django-tastypie==0.9.11
Running setup.py egg_info for package django-tastypie
Requested django-tastypie==0.9.11, but installing version 0.9.12
<...>
Я, честно говоря, несколько был шокирован такой настойчивостью pip. Пришлось показать ему кто в virtualenv’е хозяин, первая попытка пофиксить проблему была удачной, но костыльной. Это установка пакета по ссылке с pypi:
pip install http://pypi.python.org/packages/source/d/django-tastypie/django-tastypie-0.9.11.tar.gz#md5=711b29265917405c226f4594782e7e9b
Далее, ещё немного погуглив, я нашёл корень проблемы. На одном форуме было сказано что в pip есть известный баг: когда есть папка build с уже распакованными ресурсами pip отказывается проверять версию пакета, который мы ставим. Хотя, судя по сообщению: «Requested django-tastypie==0.9.11, but installing version 0.9.12», это скорее странная фича, чем баг.
Решение, как вы уже догадались, такое:
$ rm -rf $VIRTUAL_ENV/build/django-tastypie
$ pip install django-tastypie==0.9.11
Если вы это делаете не из-под virtualenv’а, то переменную $VIRTUAL_ENV заменить на путь до места, где лежат нужные исходники. Можете попробовать его найти с помощью команды find, если не знаете где оно.
После этого, pip поставил нужную версию не споря со мной.