Installazione di versioni di pacchetti specifici con pip


1314

Sto cercando di installare la versione 1.2.2 dell'adattatore MySQL_python, usando un nuovo virtual virtual creato con l' --no-site-packagesopzione. La versione corrente mostrata in PyPi è 1.2.3 . C'è un modo per installare la versione precedente? Ho trovato un articolo che afferma che questo dovrebbe farlo:

pip install MySQL_python==1.2.2

Se installato, tuttavia, viene comunque visualizzato MySQL_python-1.2.3-py2.6.egg-infonei pacchetti del sito. È un problema specifico di questo pacchetto o sto facendo qualcosa di sbagliato?


17
Grazie per il suggerimento, ha funzionato per me installare una versione precedente di openpyxl viapip install MySQL_python==1.8.9
tim

4
Sì, questo ha funzionato anche per i panda, grazie:pip install -Iv pandas==0.12.0
Tandy

1
ha funzionato anche per me: pip install xvfbwrapper == 0.2.4
amitdatta,

Risposte:


895

TL; DR:

  • pip install -Iv(ie pip install -Iv MySQL_python==1.2.2)

Innanzitutto, vedo due problemi con ciò che stai cercando di fare. Poiché hai già una versione installata, è necessario disinstallare il driver esistente corrente o utilizzarepip install -I MySQL_python==1.2.2

Tuttavia, scoprirai presto che non funziona. Se guardi il registro di installazione di pip o se lo fai pip install -Iv MySQL_python==1.2.2, scoprirai che il collegamento URL PyPI non funziona per MySQL_python v1.2.2. Puoi verificarlo qui: http://pypi.python.org/pypi/MySQL-python/1.2.2

Il link di download 404s e i link dell'URL di fallback vengono reindirizzati all'infinito a causa del recente aggiornamento di sourceforge.net e dell'URL non aggiornato di PyPI.

Quindi, per installare correttamente il driver, è possibile seguire questi passaggi:

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
Non ci dovrebbero essere problemi ad avere più versioni, questo è il punto di creare nuove cartelle per ogni versione e usare i file .pth.
Jochen Ritzel,

3
Questo installa la versione corretta così è la risposta a questa domanda - grazie per il vostro aiuto. Colpire un problema diverso ora: "errore: comando '/usr/bin/gcc-4.2' non riuscito con stato di uscita 1" durante la creazione dell'estensione '_mysql'. So di avere GCC e l'installazione di MySQL_python 1.2.3 procede senza intoppi. Altri hanno visto questo problema, in particolare con 1.2.2?
Joe,

Fai un'altra domanda per favore e pubblica il messaggio di errore che ricevi da pip.
Mahmoud Abdelkader l'


4
Curioso perché usi l'opzione -I se abbiamo già rimosso l'installazione esistente - potresti darci qualche dettaglio al riguardo?
Joe,

509

È anche possibile utilizzare un intervallo di versioni con il pip installcomando. Qualcosa come questo:

pip install 'stevedore>=1.3.0,<1.4.0'

E se il pacchetto è già installato e si desidera effettuare il downgrade, aggiungere in --force-reinstallquesto modo:

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

129
per esempio: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank,

1
Perfetto! funzionava su Ubunto 15.04 e sostituiva (automaticamente) una libreria esistente con la versione specificata. Risolti tutti i miei problemi!
zevij,

2
Vorrei solo dire che per Python 2 ho dovuto usare le virgolette doppie "invece di '
Prime_Aqasix

6
@ HandofC'thuhlu penso che dobbiamo usare le virgolette doppie per Windows e non Python 2
SmartManoj

3
Usa virgolette doppie su Windows: pip install "stevedore> = 1.3.0, <1.4.0"
jmng

139

Un modo, come suggerito in questo post , è di menzionare la versione pipcome:

pip install -Iv MySQL_python==1.2.2

cioè usa ==e menziona il numero di versione per installare solo quella versione. -I, --ignore-installedignora i pacchetti già installati.


1
Attenzione! Ho avuto l'esperienza che questo ha installato le diverse versioni una accanto all'altra ! Inoltre, pip listè interessante notare che non ne era a conoscenza, ma conda listera (e visualizzava le diverse versioni del pacchetto). Ha anche completamente confuso Pycharm .
Lionel Trebuchon,

66

Per installare una versione specifica del pacchetto python, sia che sia la prima volta, un aggiornamento o un downgrade usare:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python versione 1.2.2 non è disponibile, quindi ho usato una versione diversa. Per visualizzare tutte le versioni dei pacchetti disponibili da un indice, escludere la versione:

pip install MySQL_python==

4
Con pip 10.0.1 questa è l'unica soluzione funzionante. L'opzione "-I" in realtà reinstalla la versione precedente.
FedFranzoni,

38

Credo che se hai già installato un pacchetto, pip non lo sovrascriverà con un'altra versione. Utilizzare -Iper ignorare le versioni precedenti.


1
Non l'ho installato - usando un nuovo virtualenv creato con l'opzione --no-site-pacchetti
Joe

2
ok, quindi chiedi la versione 1.2.2 e si installa ancora la 1.2.3, e nient'altro è stato installato? La sintassi che hai usato è corretta per ottenere versioni specifiche.
dappawit,

"usando un nuovo virtualenv creato con l'opzione --no-site-pacchetti"; potresti dover precedere questo con il comando in unset PYTHONPATHmodo pipda non vedere le tue librerie preinstallate
user5359531

17

A volte, la versione precedentemente installata viene memorizzata nella cache.

~$ pip install pillow==5.2.0

Restituisce i seguenti:
Requisito già soddisfatto: pillow == 5.2.0 in /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

Possiamo usare --no-cache-dir insieme a -I per sovrascriverlo

~$ pip install --no-cache-dir -I pillow==5.2.0

5

Dato che questo sembrava essere un cambiamento sostanziale introdotto nella versione 10 di pip, ho eseguito il downgrade a una versione compatibile:

pip install 'pip<10' 

Questo comando dice a pip di installare una versione del modulo precedente alla versione 10. Fatelo in virutalenv in modo da non rovinare l'installazione del sito di Python.


5

Di recente ho riscontrato un problema durante l'utilizzo pipdel -Iflag che volevo documentare da qualche parte:

-Isarà non disinstallare il pacchetto esistente prima di procedere; lo installerà solo su quello vecchio. Ciò significa che eventuali file che devono essere eliminati tra le versioni verranno invece lasciati in posizione. Ciò può causare comportamenti strani se tali file condividono nomi con altri moduli installati.

Ad esempio, supponiamo che esista un pacchetto denominato package. In uno dei packagefile s, usano import datetime. Ora, in package@2.0.0, questo punta al datetimemodulo di libreria standard , ma in package@3.0.0, hanno aggiunto un locale datetime.pyin sostituzione della versione di libreria standard (per qualsiasi motivo).

Ora diciamo che corro pip install package==3.0.0, ma poi mi rendo conto che in realtà volevo la versione 2.0.0. Se ora corro pip install -I package==2.0.0, il vecchio datetime.pyfile non verrà rimosso, quindi qualsiasi chiamata a import datetimeimporterà il modulo sbagliato.

Nel mio caso, questo si è manifestato con strani errori di sintassi perché la versione più recente del pacchetto ha aggiunto un file compatibile solo con Python 3 e quando ho effettuato il downgrade delle versioni del pacchetto per supportare Python 2, ho continuato a importare il modulo solo Python-3.

Sulla base di ciò, direi che la disinstallazione del vecchio pacchetto è sempre preferibile all'uso -Idurante l'aggiornamento delle versioni del pacchetto installato.


3

Questo comando di seguito ha funzionato per me

Versione Python - 2.7

pacchetto - python-jenkins

comando - $ pip install 'python-jenkins>=1.1.1'


Caro downvoter, ti preghiamo di giustificare il motivo per cui questa risposta è stata annullata?
Tapan Hegde,

Non ho votato in negativo, ma vedo che questo non risponde alla domanda né fornisce informazioni utili che l'OP può utilizzare per risolvere il problema.
TheAmigo

0

Esistono 2 modi per installare qualsiasi pacchetto con la versione: - A). installazione pip -Iv nome-pacchetto == versione B). pip install -v nome-pacchetto == versione

Per un

Qui, se stai usando l'opzione -I durante l'installazione (quando non sai se il pacchetto è già installato) (come 'pip install -Iv pyreadline == 2. *' o qualcosa del genere), installeresti un nuovo pacchetto separato con lo stesso pacchetto esistente con una versione diversa.

Per B

  1. All'inizio, potresti voler verificare la presenza di requisiti non soddisfatti. controllo pip

2.e quindi vedere cosa è già installato dall'elenco pip

3.Se l'elenco dei pacchetti contiene qualsiasi pacchetto che si desidera installare con una versione specifica, l'opzione migliore è disinstallare prima il pacchetto di questa versione, tramite pip disinstallazione nome-pacchetto

4.E ora puoi continuare a reinstallare lo stesso pacchetto con una versione specifica, tramite pip install -v nome-pacchetto == versione es. Pip install -v pyreadline == 2. *


0

Se vuoi aggiornare all'ultima versione e non sai qual è l'ultima versione che puoi digitare.

pip installa MySQL_python --upgrade

Questo aggiornerà MySQL_python per l'ultima versione disponibile, che puoi usare per qualsiasi altra versione del pacchetto.

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.