2010-12-27 9 views
228

Estoy usando pip con un archivo de requisitos, en un virtualenv, para mis proyectos de Django. Estoy intentando actualizar algunos paquetes, especialmente Django en sí mismo, y estoy recibiendo un error sobre el código fuente de conflictos:¿Cómo puedo actualizar paquetes específicos usando pip y un archivo de requisitos?

Source in `<virtualenv`>/build/Django has version 1.2.3 that conflicts with Django==1.2.4 (from -r requirements/apps.txt (line 3)) 

Eso es después de actualizar el número de versión de Django de 1.2.3 a 1.2.4 en mi archivo de requisitos. Estoy usando este comando para hacer realidad la actualización:

pip --install --upgrade -E `<virtualenv dir`> --requirement `<requirements file`> 

no puedo encontrar ninguna bandera que desencadena un paquete de re-descarga total. Incluso intenté ejecutar primero un comando de desinstalación, luego la instalación pero ningún dado. Tal vez me estoy perdiendo algo?

+0

Compruebe la respuesta de @ dr-jimbob porque las versiones recientes de pip realmente actualizarán todas las demás dependencias de las que depende el paquete que está actualizando. –

Respuesta

25

No estoy seguro si es exactamente su problema, pero en mi caso, no pude actualizar Django a 1.2.4 - Siempre estaba terminando con la versión 1.2.3, así que desinstalé Django con:

<virtualenv>/bin/pip uninstall Django 

Entonces retira <virtualenv>/build/Django directorio y finalmente instalada la versión adecuada con:

<virtualenv>/bin/pip install Django 

Esperamos que esto ayude.

776

me encontré el siguiente comando y actualizado de 1.2.3 a 1.4.0

pip install Django --upgrade 

de acceso directo para la actualización:

pip install Django -U 

Nota: si el paquete que va a actualizar tiene ningún requisitos este comando adicionalmente actualizará todos los requisitos a las últimas versiones disponibles. En versiones recientes de pip, you can prevent this behavior by specifying --upgrade-strategy only-if-needed. Con ese indicador, las dependencias no se actualizarán a menos que las versiones instaladas de los paquetes dependientes ya no satisfagan los requisitos del paquete actualizado.

+7

¡Esto para mí actualizó todo mi paquete y lo eché a perder todo! Los estados de los documentos: --upgrade todos los paquetes a la versión más nueva disponible. ¿Es correcto o hice algo mal? – Prometheus

+4

@OrbiterFleet Necesitaba actualizar "solicitudes", así que hice 'pip install Requests --upgrade' y * only *" requests "se actualizó. La descripción dice "actualizar todos los * paquetes * especificados" cuando veo los documentos. – harperville

+24

ATENCIÓN, también ** actualiza todas las dependencias ** y puede estropearlo todo. la mejor opción es desinstalar y volver a instalar el paquete. – marcelosalloum

2

Normalmente, pip se limpiará y eliminará el contenido del directorio de compilación. La única vez que no lo hace es si:

  1. utilizó la opción --no-install
  2. Está utilizando paquetes editables
  3. canceló la instalación o por lo demás fue interrumpido.

En todos los demás casos, no debe tener el directorio build que está obstruyendo su entorno.

23

El comando de acceso directo para --upgrade:

pip install Django --upgrade 

es:

pip install Django -U 
+3

¿Qué hay de la edición de la respuesta existente para agregar este bit de información en lugar de una respuesta (incompleta)? – a1an

+0

@ a1an por favor sugiera qué información adicional cree que debería agregarse en una "edición sugerida". Gracias –

+2

Quiero decir que podría editar la respuesta dada por JoeyG, agregando la opción de acceso directo que proporcionó en contexto allí. – a1an

31

acuerdo con pip docs ejemplo 3

pip install --upgrade django 

pero basado en mi experiencia, el uso de este método también actualizar cualquier paquete relacionado con él. ejemplo:

Supongamos que desea actualizar somepackage que requieren django >= 1.2.4 el uso de este tipo de método que también mejorará somepackage Y django a la actualización más reciente. Sólo para estar seguro de tareas:

# assume you want to keep django 1.2.4 
pip install --upgrade somepackage django==1.2.4 

Hacer esto somepackage actualizar y mantener a Django 1.2.4 versión

5

Si sólo desea actualizar un paquete específico llamado somepackage, el comando que puedes usar en versiones recientes del PIP es

pip install --upgrade --upgrade-strategy only-if-needed somepackage 

Esto es muy útil cuando se desarrolló una aplicación de Django que en la actualidad sólo funcionará con una versión específica de Django (Django dicen = 1.9.x) y se desea actualizar algún paquete dependiente con un error -fix/nueva featu re y el paquete actualizado depende de django (pero funciona con decir cualquier versión de django después de 1.5). El comportamiento predeterminado de pip install --upgrade django-some-package sería actualizar django a la última versión disponible que podría romper su aplicación, aunque con los paquetes dependientes --upgrade-strategy only-if-needed ahora solo se actualizarán según sea necesario.

4

Si actualiza un paquete, el anterior se desinstalará.

Una manera conveniente de hacer esto es usar pip-upgrader que también actualiza las versiones en su archivo requirements.txt para los paquetes elegidos (o todos los paquetes).

instalación

pip install pip-upgrader 

Uso

Active su virtualenv (importante, ya que también instalará las nuevas versiones de paquetes actualizados en virtualenv actual).

cd en el directorio del proyecto, a continuación, ejecute:

pip-upgrade 

uso avanzado

Si los requisitos se colocan en una ubicación no estándar, enviarlos como argumentos:

pip-upgrade path/to/requirements.txt 

Si ya sabe qué paquete desea actualizar, simplemente envíelas como argumentos:

pip-upgrade -p django -p celery -p dateutil 

Si es necesario actualizar la versión preliminar de la versión posterior a la liberación /, añadir --prerelease argumento a su comando.

Descripción completa: escribí este paquete. Espero eso ayude.

Cuestiones relacionadas