Pip не устанавливает последнюю доступную версию из pypi (argparse в этом случае)

Проблема

В последнее время я работал над некоторыми проектами python и имел множество проблем с pip, не устанавливая последние версии некоторых требований. Я нахожусь на osx, и я использовал brew для установки Python 2.7.6. В проекте, над которым я работаю, мы просто pip install -r requirements.txt. В текущем случае мне нужно было установить argparse==1.2.1. Это фактическая последняя версия, показанная на веб-сайте pypi

Здесь мой вывод

Downloading/unpacking argparse==1.2.1 (from -r requirements.txt (line 4))
Could not find a version that satisfies the requirement argparse==1.2.1 (from -r requirements.txt (line 4)) (from versions: 0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.8.0, 0.9.0, 0.9.1, 1.0.1, 1.0, 1.1)
Some externally hosted files were ignored (use --allow-external to allow).
Cleaning up...
No distributions matching the version for argparse==1.2.1 (from -r requirements.txt (line 4))

У меня были аналогичные проблемы с различными типами требований, такими как matplotlib, которые я установил вручную, как показано здесь.

Как вы можете видеть, pip на моем mac имеет только те версии argparse: 0.1.0, 0.2.0, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0, 0.8.0, 0.9.0, 0.9.1, 1.0.1, 1.0, 1.1

Попытки исправить

Я попробовал переустановку python с помощью brew reinstall python, а затем попытался переустановить все мои установленные пакеты python с помощью некоторой xargs magic: pip freeze | xargs -I {} sudo pip install {} --upgrade --force-reinstall.

При попытке переустановить все, у меня были проблемы с большинством пакетов: error: invalid command 'egg_info'. Я понял, что у меня есть старый setuptools, поэтому я pip install --upgrade setuptools, и теперь я могу переустановить все, но все же, та же проблема с argparse. Еще одна проблема с argparse.

Я попросил друга со свежей установкой osx на pip install argparse, и он получил 1.1 Итак, я установил precise32 бродячий бокс для чистой установки ubuntu с помощью python-dev + libevent-dev и не было никаких проблем при установке argparse==1.2.1.

Исправление темпа

Чтобы продолжить работу над проектом, я установил argparse 1.1 на osx и, похоже, отлично работает над тем, над чем я работаю.

Вопросы

Я не очень хорошо разбираюсь в pypi (пока), но есть ли какая-то причина, почему я не получаю последние версии, показанные на pypi? Похоже, что не все libs на pypi доступны для osx. Есть ли способ узнать доступность версий для разных ОС?

Изменить: решение внутри

argparse 1.1 кажется таким же, как 1.2.1, как показано на этом выходе

[email protected]:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:08:41)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import argparse
>>> argparse.__version__
'1.1'
>>> quit()
[email protected]:~$ pip freeze | grep argparse
argparse==1.2.1

Я попытался использовать --allow-external в osx, но не понял, что ему нужно имя пакета снова.

sudo pip install argparse --allow-external argparse --upgrade

и voilà:)

argparse an externally hosted file and may be unreliable
Downloading/unpacking argparse from http://argparse.googlecode.com/files/argparse-1.2.1.tar.gz#md5=2fbef8cb61e506c706957ab6e135840c
  Downloading argparse-1.2.1.tar.gz (69kB): 69kB downloaded

Как указывал Питер, последняя версия pip default to disallowing externally hosted files.

Ответы

Ответ 1

Я думаю, что эта строка является ключом:

Некоторые внешние файлы были проигнорированы (используйте --allow-external для allow).

Когда я устанавливаю argparse, я получаю

Вы устанавливаете внешний файл. Будущие версии pip по умолчанию будут запрещать файлы, размещенные на стороне.

Загрузка argparse-1.2.1.tar.gz(69kB): загружено 69kB

Итак, у вас есть более новая версия протокола, которая по умолчанию отключает файлы, размещенные на внешнем сервере.

Ответ 2

Вот команда, которую я использовал для установки argparse, используя pip 1.5.4:

pip install --allow-all-external argparse==1.2.1