Instalar versiones de paquetes específicos con pip

1314

Estoy tratando de instalar la versión 1.2.2 del adaptador MySQL_python, utilizando un nuevo virtualenv creado con la --no-site-packagesopción. La versión actual que se muestra en PyPi es 1.2.3 . ¿Hay alguna forma de instalar la versión anterior? Encontré un artículo que decía que esto debería hacerlo:

pip install MySQL_python==1.2.2

Sin embargo, cuando está instalado, todavía se muestra MySQL_python-1.2.3-py2.6.egg-infoen los paquetes del sitio. ¿Es este un problema específico de este paquete o estoy haciendo algo mal?

Joe
fuente
17
Gracias por la pista, esto funcionó para mí para instalar una versión anterior de openpyxl a través depip install MySQL_python==1.8.9
tim
44
Sí, esto también trabajó para los pandas, gracias:pip install -Iv pandas==0.12.0
tandy
1
también funcionó para mí: pip install xvfbwrapper == 0.2.4
amitdatta

Respuestas:

895

TL; DR:

  • pip install -Iv(es decir pip install -Iv MySQL_python==1.2.2)

Primero, veo dos problemas con lo que estás tratando de hacer. Como ya tiene una versión instalada, debe desinstalar el controlador existente actual o usarpip install -I MySQL_python==1.2.2

Sin embargo, pronto descubrirá que esto no funciona. Si observa el registro de instalación de pip, o si lo hace pip install -Iv MySQL_python==1.2.2, encontrará que el enlace URL de PyPI no funciona para MySQL_python v1.2.2. Puede verificar esto aquí: http://pypi.python.org/pypi/MySQL-python/1.2.2

El enlace de descarga 404 y los enlaces de URL de reserva se redirigen infinitamente debido a la reciente actualización de sourceforge.net y la URL obsoleta de PyPI.

Entonces, para instalar correctamente el controlador, puede seguir estos pasos:

pip uninstall MySQL_python
pip install -Iv http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.2/MySQL-python-1.2.2.tar.gz/download
Mahmoud Abdelkader
fuente
1
Sin embargo, no debería haber ningún problema con tener múltiples versiones, ese es el punto de crear nuevas carpetas para cada versión y usar archivos .pth.
Jochen Ritzel
3
Esto instala la versión correcta, así que es la respuesta a esta pregunta: gracias por su ayuda. Encontrando un problema diferente ahora: "error: el comando '/usr/bin/gcc-4.2' falló con el estado de salida 1" al construir la extensión '_mysql'. Sé que tengo GCC, y la instalación de MySQL_python 1.2.3 se realiza sin problemas. ¿Han visto otros este problema, específicamente con 1.2.2?
Joe
Haga otra pregunta por favor y publique el mensaje de error que recibe de pip.
Mahmoud Abdelkader
2
Claro, aquí está el enlace: stackoverflow.com/questions/5226945/…
Joe
44
Curioso por qué usa la opción -I si ya hemos eliminado la instalación existente, ¿podría dar algunos detalles al respecto?
Joe
509

Incluso puede usar un rango de versiones con pip installcomando. Algo como esto:

pip install 'stevedore>=1.3.0,<1.4.0'

Y si el paquete ya está instalado y desea degradarlo, agregue --force-reinstallasí:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
usuario1978556
fuente
129129
por ejemplo: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank
1
¡Perfecto! se ejecutó en Ubunto 15.04 y (automáticamente) reemplazó una biblioteca existente con la versión especificada. Resuelto todos mis problemas!
zevij
2
Solo voy a mencionar que para Python 2 tuve que usar comillas dobles "en lugar de '
Prime_Aqasix
66
@ HandofC'thuhlu, creo que tenemos que usar comillas dobles para Windows y no Python 2
SmartManoj
3
Use comillas dobles en Windows: pip install "stevedore> = 1.3.0, <1.4.0"
jmng
139

Una forma, como se sugiere en esta publicación , es mencionar la versión pipcomo:

pip install -Iv MySQL_python==1.2.2

es decir, use ==y mencione el número de versión para instalar solo esa versión. -I, --ignore-installedignora los paquetes ya instalados.

Srikar Appalaraju
fuente
1
¡Tener cuidado! ¡Tuve la experiencia de que esto instaló las diferentes versiones una al lado de la otra ! También, curiosamente, pip listno estaba al tanto de eso, pero conda listestaba (y mostraría las diferentes versiones del paquete). También confundió completamente a Pycharm .
Lionel Trebuchon
66

Para instalar una versión específica del paquete de Python, ya sea la primera vez, una actualización o un uso anterior:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python versión 1.2.2 no está disponible, así que utilicé una versión diferente. Para ver todas las versiones de paquete disponibles de un índice, excluya la versión:

pip install MySQL_python==
Zach Weg
fuente
44
Con pip 10.0.1 esta es la única solución de trabajo. La opción "-I" en realidad reinstala la versión anterior.
FedFranzoni
38

Creo que si ya tiene un paquete instalado, pip no lo sobrescribirá con otra versión. Use -Ipara ignorar versiones anteriores.

dappawit
fuente
1
No lo tengo instalado, utilizando un nuevo virtualenv creado con la opción --no-site-packages
Joe
2
bien, ¿pides la versión 1.2.2 y aún se instala 1.2.3 y no se instaló nada más? La sintaxis que usó es correcta para obtener versiones específicas.
dappawit
"utilizando un nuevo virtualenv creado con la opción --no-site-packages"; puede que tenga que preceder esto con el comando unset PYTHONPATHde modo de mantener pipvean sus bibliotecas preinstaladas
user5359531
17

A veces, la versión instalada anteriormente se almacena en caché.

~$ pip install pillow==5.2.0

Devuelve lo siguiente:
Requisito ya satisfecho: almohada == 5.2.0 en /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

Podemos usar --no-cache-dir junto con -I para sobrescribir esto

~$ pip install --no-cache-dir -I pillow==5.2.0
Jack Chan
fuente
5

Como esto parecía ser un cambio innovador introducido en la versión 10 de pip, bajé a una versión compatible:

pip install 'pip<10' 

Este comando le dice a pip que instale una versión del módulo inferior a la versión 10. Haga esto en un virutalenv para que no arruine la instalación de Python en su sitio.

Trenton
fuente
5

Recientemente me encontré con un problema al usar pipla -Ibandera que quería documentar en alguna parte:

-Iserá no desinstalar el paquete existente antes de proceder; simplemente lo instalará sobre el anterior. Esto significa que los archivos que deben eliminarse entre versiones se dejarán en su lugar. Esto puede causar un comportamiento extraño si esos archivos comparten nombres con otros módulos instalados.

Por ejemplo, digamos que hay un paquete llamado package. En uno de packagelos archivos s, usan import datetime. Ahora, en [email protected], esto apunta al datetimemódulo de biblioteca estándar , pero en [email protected], agregaron un local datetime.pycomo reemplazo de la versión de biblioteca estándar (por cualquier razón).

Ahora digamos que corro pip install package==3.0.0, pero luego me doy cuenta de que realmente quería la versión 2.0.0. Si ahora ejecuto pip install -I package==2.0.0, el datetime.pyarchivo anterior no se eliminará, por lo que cualquier llamada a import datetimeimportará el módulo incorrecto.

En mi caso, esto se manifestó con errores de sintaxis extraños porque la versión más nueva del paquete agregó un archivo que solo era compatible con Python 3, y cuando bajé las versiones del paquete para admitir Python 2, continué importando el módulo solo Python-3.

En base a esto, argumentaría que desinstalar el paquete anterior siempre es preferible a usar -Ial actualizar las versiones instaladas del paquete.

0x5453
fuente
3

Este comando a continuación funcionó para mí

Versión de Python - 2.7

paquete - python-jenkins

comando $ pip install 'python-jenkins>=1.1.1'

Tapan Hegde
fuente
Estimado votante, ¿Por qué justifica esta respuesta?
Tapan Hegde
No voté en contra, pero puedo ver que esto no responde la pregunta ni proporciona ninguna información útil que el OP pueda usar para resolver el problema.
TheAmigo
0

Hay 2 formas de instalar cualquier paquete con la versión: - A). pip install -Iv package-name == versión B). pip install -v package-name == versión

Para

Aquí, si está utilizando la opción -I durante la instalación (cuando no sabe si el paquete ya está instalado) (como 'pip install -Iv pyreadline == 2. *' o algo así), estaría instalando un nuevo paquete separado con el mismo paquete existente que tiene una versión diferente.

Para B

  1. Al principio, es posible que desee verificar que no haya requisitos incumplidos. cheque de pepita

2. y luego vea lo que ya está instalado por pip list

3.si la lista de paquetes contiene algún paquete que desee instalar con una versión específica, entonces la mejor opción es desinstalar primero el paquete de esta versión, por pip uninstall package-name

4. Y ahora puede continuar para reinstalar el mismo paquete con una versión específica, pip install -v package-name == versión, por ejemplo, pip install -v pyreadline == 2. *

Samarth
fuente
0

Si desea actualizar a la última versión y no sabe cuál es la última versión, puede escribir.

pip install MySQL_python --upgrade

Esto actualizará MySQL_python para la última versión disponible, puede usar para cualquier otra versión de paquete.

DilMac
fuente