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?


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

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

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.


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

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.


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

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.


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 package@2.0.0, esto apunta al datetimemódulo de biblioteca estándar , pero en package@3.0.0, 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.


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'


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. *


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.