¿Por qué pip está instalando una versión antigua de mi paquete?

80

Acabo de cargar una nueva versión de mi paquete en PyPi (1.2.1.0-r4): puedo descargar el archivo egg e instalarlo con easy_install, y la versión se comprueba correctamente. Pero cuando intento instalar usando pip, instala la versión 1.1.0.0 en su lugar. Incluso si especifico explícitamente la versión con la que pip pip install -Iv tome==1.2.1.0-r4, recibo este mensaje:, Requested tome==1.2.1.0-r4, but installing version 1.1.0.0pero no entiendo por qué.

Verifiqué dos veces parse_versiony confirmé que la cadena de la versión en 1.2.1 es mayor que en 1.1.0 como se muestra:

>>> from pkg_resources import parse_version as pv
>>> pv('1.1.0.0') < pv('1.2.1.0-r4')
True
>>>

Entonces, ¿alguna idea de por qué está eligiendo instalar 1.1.0 en su lugar?

Brianmearns
fuente
No se pudo reproducir. pip install -Iv tome==1.2.1.0-r4se instala para mí (de acuerdo con los mensajes y pip freezeel paquete tome==1.2.1.0-r4.
David Robinson
¿Probablemente todavía esté en tu camino en algún lugar? Pruébelo con-U
Wolph
Hm ... está bien, eso es interesante. Intenté desinstalarlo con pip, supongo que tendré que investigar un poco más y asegurarme de que todo haya desaparecido. ¡Gracias por revisar!
brianmearns
Parece una especie de error en pip. Tengo un problema similar, pero no puedo instalar una versión anterior de django-deliciouspie.
Simplylizz

Respuestas:

95

Esta es una excelente pregunta. Me tomó una eternidad darme cuenta. Esta es la solución que me funciona:

Aparentemente, si pippuede encontrar una versión local del paquete, pippreferirá las versiones locales a las remotas. Incluso desconecté mi computadora de Internet y lo intenté nuevamente; cuando pipaún instalé el paquete correctamente, y ni siquiera me quejé, la fuente era obviamente local.

La parte realmente confusa, en mi caso, fue que pipencontré las versiones más nuevas en pypi , las informó y luego siguió adelante y reinstaló la versión anterior de todos modos ... arggh. Además, no me dijo qué estaba haciendo y por qué.

Entonces, ¿cómo resolví este problema?

Puede pipdar una salida detallada usando la -vbandera ... pero una no es suficiente. Realicé RTFM-ed la ayuda, que decía que puedes hacerlo -vvarias veces, hasta 3 veces, para obtener una salida más detallada. Así que lo hice:

pip install -vvv <my_package>

Luego miré a través de la salida. Una línea me llamó la atención:

La fuente en / tmp / pip-build-root / tiene la versión 0.0.11, que satisface el requisito <my_package>

Eliminé ese directorio, después de lo cual pipinstalé la versión más reciente de pypi.

Matt Fenwick
fuente
Parece que esto aún no se ha solucionado.
Ale
1
@ Ale110 Se ha solucionado; consulte mi respuesta para obtener más detalles.
Piotr Dobrogost
5
Para su información, puede usar en -vvvlugar de -v -v -v.
bfontaine
3
También puede usar la --no-cache-dirbandera en lugar de buscar y eliminar el archivo en formato /tmp/.
ethanabrooks
41

Intente forzar la descarga del paquete nuevamente con:

pip install --no-cache-dir --upgrade <package>
Iacchus
fuente
1
Esto me ha funcionado. Finalmente obtuve v0.4 de photoutils instalado sobre v0.2.1. Pip estaba descargando v0.4 tar pero luego simplemente instalaría (o mantendría) el v0.2.1. ¡Los indicadores --no-cache-dir y --upgrade finalmente lo lograron! Gracias
scibuff
4
Esta es la respuesta correcta aquí. Pip mantiene un caché de la página Pypi relevante durante 600 segundos de forma predeterminada. Entonces, incluso si elimina el paquete en caché local, debe esperar los 10 minutos para que pip obtenga la nueva página con todos los enlaces de la nueva versión.
brthornbury
1
Esta parece una respuesta muy lógica. Sin embargo, las instalaciones de pip obtienen la misma versión anterior, aunque la versión que veo a través pip searches más reciente.
Mavamaarten
1
Intente comprobar si es algo con virtualenv. Ah, versiones de Python.
Iacchus
25

Gracias a Marcus Smith , quien hace un trabajo increíble como mantenimiento de pip, esto se solucionó en la versión 1.4 de pip que se lanzó el 2013-07-23.

Información relevante del registro de cambios para esta versión

Se corrigieron varios problemas (# 413, # 709, # 634, # 602 y # 939) relacionados con la limpieza y no reutilización de directorios de compilación. (Tire # 865, # 948)

Piotr Dobrogost
fuente
5
Esto debe marcarse como la respuesta correcta. Actualice pip así:pip install -U pip
Emil Stenström
2
Esta solución aún no aborda pip silenciosamente usando una versión en caché, que se puede resolver usando la respuesta de Iacchus
Burrito
1
No, parece que no se ha solucionado. Me estoy encontrando con el mismo problema ahora mismo.
Regis mayo
17

Encontré aquí que hay un error conocido en pip que no verifica la versión si hay un directorio de compilación con fuentes descomprimidas. He comprobado esto en mi paquete problemático y después de eliminar sus fuentes del directorio de compilación, pip instalé la versión requerida.

simplemente lizz
fuente
2
Gracias por la información. ¿Alguna idea de dónde debería buscar el directorio de compilación? Intenté eliminarlo de Python \ Lib \ site-packages, pero los resultados fueron los mismos. No estoy ejecutando el comando desde una ubicación donde existe el paquete ni nada.
brianmearns
@ sh1ftst0rm Estoy usando virtualenv bajo linux y para django-deliciouspie era eso: "$ VIRTUAL_ENV / build / django-deliciouspie". Intente verificar la parte superior del directorio de Python o simplemente use la búsqueda en su sistema. También puede intentar usar "pip install -b <ruta al directorio de compilación personalizado>".
Simplylizz
1
Este no parece ser mi problema, he buscado por todas partes y no puedo encontrar ningún rastro del paquete o un directorio de compilación en mi sistema. Debe ser algún otro error en pip = (. Buen consejo de todos modos, estoy seguro de que esta será la solución para mucha gente.
brianmearns
9

Si está utilizando una pipversión que viene con algunos paquetes de distribución (por ejemplo, Ubuntu python-pip), es posible que deba instalar una pipversión más reciente:

Actualice pipa la última versión:

sudo pip install -U pip

En caso de "virtualenv", omita "sudo":

pip install -U pip

Es posible que se requiera el siguiente comando, si su shell informa algo como -bash: /usr/bin/pip: No such file or directorydespués de la pipactualización:

hash -d pip

Ahora instale su paquete como de costumbre:

pip install -U foo

o

pip install foo==package.version.here

ribozz
fuente
6

Tengo el mismo problema para actualizar pika 0.9.5 a 0.9.8. La única forma de trabajo fue la instalación del archivo tar: pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz.

Piedad
fuente
2
+1 Gracias, esto me dio una pista sobre algo importante: pip se basa en las distribuciones de fuentes: con mi última versión, olvidé cargar una fuente dist, así que cuando intenté instalar, solo obtendría la versión anterior. Esto no resuelve mi problema original, pero es útil saberlo.
brianmearns
1

En mi caso, tuve que eliminar la .pipcarpeta en mi directorio de inicio y luego pude obtener versiones posteriores de varias bibliotecas. Tenga en cuenta que esto fue en Linux.

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

Descubrí que si usa microversiones, pip no parece reconocerlas. Por ejemplo, no pudimos actualizar la versión 1.9.9.1.

mlissner
fuente
2
tal vez porque '1.9.9.1' no es compatible con SemVer, vea semver.org
tector
0

En mi caso, la versión de python utilizada (3.4) no cumplió con los requisitos de dependencias de Django 2.1 (python> = 3.5).

Alberto Chiusole
fuente
0

En mi caso, estoy instalando un paquete .tar.gz de Artifactory al que realizo muchas actualizaciones. Para sobrescribir mis archivos de Python en caché y siempre tomar / instalar lo último que pude ejecutar:

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

Debería ver esto, volver a descargar los archivos necesarios e instalarlos, en lugar de usar su caché local.

Cheen
fuente
0

En mi caso, alguien había publicado la última versión de un paquete con python2, por lo que al intentarlo, tomé pip3 installuna versión anterior que se había construido con python3.

Cosas útiles para verificar al depurar esto:

  • Si pip installafirma que no puede encontrar la versión, vea si pip searchpuede verla.
  • Eche un vistazo a la sección "Descargar archivos" en el repositorio de pypi: los nombres de los archivos pueden sugerir lo que está mal (en mi caso, vi -py2- claro como el día).
  • Como lo sugirieron otros, intente ejecutar pip install --no-cache-diren caso de que pip no se moleste en preguntar a Internet porque ya tiene su respuesta localmente.
jarekwg
fuente
0

Había ocultado archivos sin versión en la pestaña Git en PyCharm que se estaban instalando con pip install . aunque no vi los archivos en ningún otro lugar.

Me tomó mucho tiempo encontrarlo y lo publiqué con la esperanza de que ayude a alguien más.

Mandera
fuente
0

En caso de que alguien más tenga problemas para actualizar el texto de antorcha (o probablemente cualquier otrotorch biblioteca):

Aunque https://pypi.org/project/torchtext/ indica que se podía ejecutar pip install torchtext, tuve que instalarlo de forma similar torchespecificando --find-linksaka -f:

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

Lo que me molestó fue que PyCharm me indicó la nueva versión, pero no pudo encontrarla al intentar actualizarla. Supongo que PyCharm usa su propio mecanismo para detectar nuevas versiones. Luego, al invocar pipbajo el capó, no encontró la nueva versión sin la --find-linksopción.

Tobias Uhmann
fuente