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.