Come posso aggiornare pacchetti specifici usando pip e un file di requisiti?


437

Sto usando pip con un file di requisiti, in un virtualenv, per i miei progetti Django. Sto cercando di aggiornare alcuni pacchetti, in particolare Django stesso, e sto ricevendo un errore sui conflitti del codice sorgente:

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

Questo dopo aver aggiornato il numero di versione di Django dalla 1.2.3 alla 1.2.4 nel mio file dei requisiti. Sto usando questo comando per eseguire effettivamente l'aggiornamento:

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

Non riesco a trovare alcuna bandiera che inneschi un nuovo download del pacchetto. Ho anche provato a eseguire prima un comando di disinstallazione, quindi l'installazione ma nessun dado. Forse mi manca qualcosa?


1
Controlla la risposta di @ dr-jimbob perché le versioni recenti di pip aggiorneranno effettivamente tutte le altre dipendenze dalle quali dipende il pacchetto che stai aggiornando.
Lokesh Meher,

Risposte:


61

Non sono sicuro che sia esattamente il tuo problema, ma nel mio caso, non sono stato in grado di aggiornare Django alla 1.2.4 - Finivo sempre con la versione 1.2.3, quindi ho disinstallato Django con:

<virtualenv>/bin/pip uninstall Django

Quindi ho rimosso la <virtualenv>/build/Djangodirectory e finalmente ho installato la versione corretta con:

<virtualenv>/bin/pip install Django

Spero che questo possa aiutare.


53
Questa non è la migliore pratica. Usa pip install Django -Uo pip install Django --upgradecome descritto nella risposta di @JoeyG.
Ahmad,

@Ahmad sono d'accordo. Dovrebbe esserci un processo di aggiornamento regolare in pip e in ambiente virtuale.
Parth Joshi,

1274

Ho eseguito il seguente comando e aggiornato da 1.2.3 a 1.4.0

pip install Django --upgrade

Scorciatoia per l'aggiornamento:

pip install Django -U

Nota : se il pacchetto che si sta aggiornando ha dei requisiti questo comando aggiorna inoltre tutti i requisiti alle ultime versioni disponibili. Nelle versioni recenti di pip, è possibile impedire questo comportamento specificando--upgrade-strategy only-if-needed . Con tale flag, le dipendenze non verranno aggiornate a meno che le versioni installate dei pacchetti dipendenti non soddisfino più i requisiti del pacchetto aggiornato.


7
Questo per me ha aggiornato tutto il mio pacchetto e totalmente incasinato tutto !!!! Stati dei documenti: - aggiorna tutti i pacchetti alla versione più recente disponibile. È corretto o ho fatto qualcosa di sbagliato?
Prometeo,

4
@OrbiterFleet Avevo bisogno di aggiornare "richieste", così ho fatto pip install Requests --upgradee solo "richieste" è stato aggiornato. La descrizione dice "aggiorna tutti i pacchetti specificati " quando visualizzo i documenti.
Harperville,

31
ATTENZIONE, aggiorna anche tutte le dipendenze e può rovinare tutto. l'opzione migliore è disinstallare e reinstallare il pacchetto.
marcelosalloum,

3
per aggiornare l'uso specifico del pacchettopip install --upgrade django==1.4.0
whale_steward

questa dovrebbe essere la risposta giusta in base alla domanda o la domanda stessa è sbagliata.
int soumen,

51

secondo l' esempio 3 di pip docs

pip install --upgrade django

ma in base alla mia esperienza, l'uso di questo metodo aggiornerà anche qualsiasi pacchetto ad esso correlato. esempio:

Supponiamo di voler eseguire l'aggiornamento somepackageche richiede l' django >= 1.2.4utilizzo di questo tipo di metodo e che eseguirà l'aggiornamento somepackageE djangoall'ultimo aggiornamento. Per sicurezza, fai:

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

In questo modo aggiornerai somepackagee manterrai django alla versione 1.2.4


Buona cattura ma la tua spiegazione è confusa da quando hai iniziato djangocome pacchetto principale, poi nell'esempio che usi somepackagee poi usi djangocome dipendenza.
Lungo

34

Il comando di scelta rapida per --upgrade:

pip install Django --upgrade

È:

pip install Django -U

7
Che ne dici di modificare la risposta esistente per aggiungere questo bit di informazioni anziché una risposta (incompleta)?
a1an

@ a1an, per favore, suggerisci quali informazioni extra ritieni debbano essere aggiunte in una "modifica suggerita". Grazie
Aaron Lelevier il

4
Voglio dire che potresti modificare la risposta data da JoeyG, aggiungendo l'opzione di scelta rapida che hai fornito nel contesto lì.
a1an,

17

Se aggiorni un pacchetto, quello vecchio verrà disinstallato.

Un modo conveniente per farlo è usare questo pip-upgrade che aggiorna anche le versioni nel tuo requirements.txtfile per i pacchetti scelti (o tutti i pacchetti).

Installazione

pip install pip-upgrader

uso

Attiva il tuo virtualenv (importante, perché installerà anche le nuove versioni dei pacchetti aggiornati nell'attuale virtualenv).

cd nella directory del progetto, quindi esegui:

pip-upgrade

Utilizzo avanzato

Se i requisiti sono collocati in una posizione non standard, inviarli come argomenti:

pip-upgrade path/to/requirements.txt

Se sai già quale pacchetto vuoi aggiornare, semplicemente inviali come argomenti:

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

Se è necessario eseguire l'aggiornamento alla versione pre-release / post-release, aggiungere --prereleaseargomento al comando.

Divulgazione completa: ho scritto questo pacchetto. Spero che sia d'aiuto.


1
esiste un'opzione per aggiornare tutti i pacchetti contemporaneamente (cioè senza elencarli) con questo approccio?
Fan numero uno di Bjorks

1
@MikePalmice sì: pip-upgrade -p allaggiornerà tutti i tuoi pacchetti e aggiornerà il file dei requisiti senza bisogno di alcun input da parte tua.
Simion Agavriloaei

16

Se si desidera aggiornare solo un pacchetto specifico chiamato somepackage, il comando da utilizzare nelle versioni recenti di pip è

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

Questo è molto utile quando hai sviluppato un'applicazione in django che attualmente funzionerà solo con una versione specifica di django (diciamo Django = 1.9.x) e vuoi aggiornare alcuni pacchetti dipendenti con una correzione di bug / nuova funzionalità e il pacchetto aggiornato dipende su django (ma funziona con qualsiasi versione di django dopo la 1.5). Il comportamento predefinito di pip install --upgrade django-some-packagesarebbe aggiornare django all'ultima versione disponibile che potrebbe altrimenti interrompere l'applicazione, anche se con i --upgrade-strategy only-if-neededpacchetti dipendenti ora verrà aggiornato solo se necessario.


4

Normalmente, pip pulirà dopo se stesso e rimuoverà il contenuto della directory di compilazione. L'unica volta che non lo fa è se:

  1. Hai usato il --no-install opzione
  2. Stai utilizzando pacchetti modificabili
  3. L'installazione è stata annullata o altrimenti interrotta.

In tutti gli altri casi, non dovresti avere builddirectory che intasano il tuo ambiente.


1

Definire una versione specifica da aggiornare mi ha aiutato invece del solo comando di aggiornamento.

pip3 install larapy-installer==0.4.01 -U

0

che mi ha risolto il problema "pip install -I --upgrade psutil --force" in seguito basta disinstallare psutil con la nuova versione e sperare che tu possa improvvisamente installare la versione precedente (:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.