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