Pip no instala la última versión disponible de pypi (argparse en este caso)

El problema

Trabajé en algunos proyectos de Python últimamente y tuve muchos problemas con pip no para instalar las últimas versiones de algunos requisitos. Estoy en osx y utilicé brew para instalar Python 2.7.6 . En el proyecto en el que estoy trabajando, simplemente pip install -r requirements.txt . En el caso actual, necesitaba instalar argparse==1.2.1 . Esta es la última versión real que se muestra en el sitio web de pypi

Aquí está mi salida

 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)) 

Tuve problemas similares con diferentes tipos de requisitos, como matplotlib que instalé manualmente como se ve aquí .

Como puedes ver, pip en mi mac solo tiene esas versiones 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

Intentos de arreglar

Intenté volver a instalar python con brew reinstall python , luego también intenté reinstalar todos mis paquetes de python instalados con algo de magia xargs: pip freeze | xargs -I {} sudo pip install {} --upgrade --force-reinstall pip freeze | xargs -I {} sudo pip install {} --upgrade --force-reinstall .

Al intentar reinstalar todo, tuve problemas con la mayoría de los paquetes: error: invalid command 'egg_info' . Me di cuenta de que tenía setuptools antiguas, así que pip install --upgrade setuptools y ahora podría reinstalar todo, pero aún así, el mismo problema con argparse . Sigue con el mismo problema con argparse.

Le pedí a un amigo con un osx recién instalado que pip install argparse y él obtuvo 1.1 Así que configuré una caja precise32 para una instalación limpia de ubuntu con python-dev + libevent-dev y no tuve ningún problema en absoluto al instalar argparse==1.2.1 .

Arreglo de temperatura

Para continuar trabajando en el proyecto, instalé argparse 1.1 en osx y parece que funciona bien atm para lo que estoy trabajando.

Preguntas

No soy muy bueno con pypi (todavía), pero ¿hay alguna razón por la que no obtenga las últimas versiones que se muestran en pypi? Parece que no todas las librerías en pypi están disponibles para osx. ¿Hay alguna manera de saber la disponibilidad de versiones para diferentes sistemas operativos?

Edición: solución dentro

argparse 1.1 parece ser lo mismo que 1.2.1 como se muestra en esta salida

 vagrant@precise32:~$ 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() vagrant@precise32:~$ pip freeze | grep argparse argparse==1.2.1 

Intenté usar --allow-external en osx, pero no me di cuenta de que necesitaba el nombre del paquete otra vez.

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

y 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 

Como señaló Peter, la última versión de pip por default to disallowing externally hosted files .

Creo que esta línea es la clave:

Algunos archivos alojados externamente fueron ignorados (use –allow-external para permitir).

Cuando instalo argparse aqui me sale

Está instalando un archivo alojado externamente. Las versiones futuras de pip por defecto deshabilitarán los archivos alojados externamente.

Descargando argparse-1.2.1.tar.gz (69kB): 69kB descargado

Así que tienes una versión más nueva de pip que no permite archivos externos alojados de forma predeterminada

Aquí está el comando que utilicé para instalar argparse usando pip 1.5.4:

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