Instalando versiones específicas de paquetes con pip

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

 pip install MySQL_python==1.2.2 

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

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

Sin embargo, pronto descubrirás que esto no funciona. Si observa el registro de instalación de pip, o si realiza una 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 404s y los enlaces URL de reserva se están redirigiendo infinitamente debido a la reciente actualización de sourceforge.net y la URL obsoleta de PyPI.

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 

Incluso puedes usar un rango de versiones con el comando pip install . Algo como esto:

 pip install 'stevedore>=1.3.0,<1.4.0' 

Y si el paquete ya está instalado y desea degradarlo, agregue --force-reinstall esta manera:

 pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall 

Una forma como se sugiere en este post es mencionar la versión en pip como

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-installed ignora los paquetes ya instalados.

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

 pip install --force-reinstall MySQL_python==1.2.4 

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

 pip install MySQL_python== 

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

Como esto parecía ser un cambio de última hora 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. Haz esto en un virutalenv para que no arruines la instalación de Python en tu sitio.

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

 ~$ pip install pillow==5.2.0 

Devuelve lo siguiente:
Requisito ya cumplido: 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 

Hay 2 formas de instalar cualquier paquete con la versión: – A). pip instalar -Iv nombre-paquete == versión B). pip instalar -v nombre-paquete == 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 alguna versión diferente.

Para b

  1. Al principio, es posible que desee comprobar si hay requisitos rotos. chequeo de pip

2. y luego ver lo que ya está instalado por lista de pip

3. Si la lista de paquetes contiene cualquier paquete que desee instalar con una versión específica, la mejor opción es desinstalar primero el paquete de esta versión, por pip desinstale nombre-paquete

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

Recientemente tuve un problema al usar el indicador -I pip que quería documentar en algún lugar:

-I desinstalaré el paquete existente antes de continuar; simplemente lo instalará encima del anterior. Esto significa que cualquier archivo que deba eliminarse entre versiones se dejará 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 los archivos del package , usan import datetime y import datetime . Ahora, en package@2.0.0 , esto apunta al módulo datetime biblioteca estándar, pero en package@3.0.0 , agregaron un datetime.py local como un reemplazo para la versión estándar de la biblioteca (por cualquier razón).

Ahora digamos que ejecuto el 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 antiguo archivo datetime.py no se eliminará, por lo que cualquier llamada para import datetime importará el módulo incorrecto.

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

En base a esto, argumentaría que la desinstalación del paquete anterior siempre es preferible a usar -I al actualizar las versiones instaladas del paquete.