Instalando versões de pacotes específicas com pip

1314

Estou tentando instalar a versão 1.2.2 do adaptador MySQL_python, usando um novo virtualenv criado com a --no-site-packagesopção A versão atual mostrada no PyPi é 1.2.3 . Existe uma maneira de instalar a versão mais antiga? Encontrei um artigo afirmando que isso deveria ser feito:

pip install MySQL_python==1.2.2

Quando instalado, no entanto, ele ainda aparece MySQL_python-1.2.3-py2.6.egg-infonos pacotes do site. Esse é um problema específico deste pacote ou estou fazendo algo errado?

Joe
fonte
17
Obrigado pela dica, isso funcionou para mim para instalar uma versão mais antiga do openpyxl viapip install MySQL_python==1.8.9
tim
4
Sim, isso também funcionou para pandas, obrigado:pip install -Iv pandas==0.12.0
tandy
1
funcionou para mim também: pip install xvfbwrapper == 0.2.4
amitdatta 15/05

Respostas:

895

TL; DR:

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

Primeiro, vejo dois problemas com o que você está tentando fazer. Como você já possui uma versão instalada, desinstale o driver existente atual ou usepip install -I MySQL_python==1.2.2

No entanto, em breve você descobrirá que isso não funciona. Se você olhar o log de instalação do pip, ou se fizer pip install -Iv MySQL_python==1.2.2isso, verá que o link da URL do PyPI não funciona para o MySQL_python v1.2.2. Você pode verificar isso aqui: http://pypi.python.org/pypi/MySQL-python/1.2.2

O link de download 404s e os links da URL de fallback estão redirecionando infinitamente devido à atualização recente do sourceforge.net e ao URL antigo do PyPI.

Portanto, para instalar corretamente o driver, você pode seguir estas etapas:

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
Mahmoud Abdelkader
fonte
1
Não deve haver nenhum problema em ter várias versões, é o ponto de criar novas pastas para todas as versões e usar arquivos .pth.
Jochen Ritzel 7/03/11
3
Isso instala a versão correta, assim como a resposta a esta pergunta - obrigado por sua ajuda. Atingindo um problema diferente agora: "erro: o comando '/usr/bin/gcc-4.2' falhou com o status de saída 1" ao criar a extensão '_mysql'. Eu sei que tenho o GCC, e a instalação do MySQL_python 1.2.3 ocorre sem problemas. Outros já viram esse problema, especificamente com o 1.2.2?
8111 Joe
Faça outra pergunta e poste a mensagem de erro que você está recebendo do pip.
Mahmoud Abdelkader
2
Claro - aqui está o link: stackoverflow.com/questions/5226945/…
Joe
4
Curioso por que você usa a opção -I se já removemos a instalação existente - você poderia dar alguns detalhes sobre isso?
Joe
509

Você pode até usar um intervalo de versões com o pip installcomando Algo assim:

pip install 'stevedore>=1.3.0,<1.4.0'

E se o pacote já estiver instalado e você desejar fazer o downgrade, adicione --force-reinstallassim:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
user1978556
fonte
129
por exemplo: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank 8/01/16
1
perfeito! correu no Ubunto 15.04 e (automaticamente) substituiu uma biblioteca existente pela versão especificada. Resolvi todos os meus problemas!
zevij
2
Só vou mencionar que no Python 2 eu tive que usar aspas duplas "em vez de '
Prime_Aqasix 6/17
6
@ HandofC'thuhlu eu acho que nós temos que usar aspas duplas para janelas e não python 2
SmartManoj
3
Use aspas duplas no Windows: pip install "stevedore> = 1.3.0, <1.4.0"
jmng
139

Uma maneira, conforme sugerido neste post , é mencionar a versão pipcomo:

pip install -Iv MySQL_python==1.2.2

ou seja, use ==e mencione o número da versão para instalar apenas essa versão. -I, --ignore-installedignora pacotes já instalados.

Srikar Appalaraju
fonte
1
Cuidado! Tive a experiência de instalar as diferentes versões uma ao lado da outra ! Curiosamente, pip listnão estava ciente disso, mas conda listestava (e exibia as diferentes versões do pacote). Também Pycharm completamente confuso .
Lionel Trebuchon 5/03/19
66

Para instalar uma versão específica do pacote python, seja na primeira vez, em uma atualização ou em um downgrade, use:

pip install --force-reinstall MySQL_python==1.2.4

O MySQL_python versão 1.2.2 não está disponível, então usei uma versão diferente. Para visualizar todas as versões de pacotes disponíveis de um índice, exclua a versão:

pip install MySQL_python==
Zach Weg
fonte
4
Com o pip 10.0.1, essa é a única solução funcional. A opção "-I" na verdade reinstala a versão anterior.
FedFranzoni
38

Acredito que se você já tiver um pacote instalado, o pip não o substituirá por outra versão. Use -Ipara ignorar versões anteriores.

dappawit
fonte
1
Eu não o tenho instalado - usando um virtualenv novo criado com a opção --no-site-packages
Joe
2
ok, você pede a versão 1.2.2 e ela ainda instala a 1.2.3, e nada mais foi instalado? A sintaxe que você usou está correta para obter versões específicas.
precisa saber é
"usando um virtualenv novo criado com a opção --no-site-packages"; talvez você precise preceder isto com o comando unset PYTHONPATHde modo a manter pipde ver as suas bibliotecas pré-instalados
user5359531
17

Às vezes, a versão instalada anteriormente é armazenada em cache.

~$ pip install pillow==5.2.0

Ele retorna o seguinte:
Requisito já satisfeito: pillow == 5.2.0 em /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

Podemos usar --no-cache-dir junto com -I para sobrescrever isso

~$ pip install --no-cache-dir -I pillow==5.2.0
Jack Chan
fonte
5

Como essa parece ser uma alteração introduzida na versão 10 do pip, fiz o downgrade para uma versão compatível:

pip install 'pip<10' 

Este comando diz ao pip para instalar uma versão do módulo inferior à versão 10. Faça isso em um virutalenv para não estragar a instalação do Python no site.

Trenton
fonte
5

Recentemente, encontrei um problema ao usar pipo -Isinalizador que queria documentar em algum lugar:

-Inão vai desinstalar o pacote existente antes de prosseguir; apenas o instalará em cima do antigo. Isso significa que todos os arquivos que devem ser excluídos entre as versões serão deixados no lugar. Isso pode causar um comportamento estranho se esses arquivos compartilharem nomes com outros módulos instalados.

Por exemplo, digamos que haja um pacote chamado package. Em um dos packagearquivos s, eles usam import datetime. Agora, em [email protected], isso aponta para o datetimemódulo da biblioteca padrão , mas em [email protected], eles adicionaram um local datetime.pycomo um substituto para a versão da biblioteca padrão (por qualquer motivo).

Agora vamos dizer que corro pip install package==3.0.0, mas depois percebo que eu realmente queria a versão 2.0.0. Se eu executar agora pip install -I package==2.0.0, o datetime.pyarquivo antigo não será removido, portanto, qualquer chamada para import datetimeimportará o módulo errado.

No meu caso, isso se manifestou com estranhos erros de sintaxe, porque a versão mais recente do pacote adicionou um arquivo compatível apenas com o Python 3 e, quando desclassifiquei as versões do pacote para dar suporte ao Python 2, continuei importando o módulo somente do Python-3.

Com base nisso, eu argumentaria que a desinstalação do pacote antigo é sempre preferível ao uso -Iao atualizar as versões do pacote instalado.

0x5453
fonte
3

Este comando abaixo funcionou para mim

Versão Python - 2.7

pacote - python-jenkins

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

Tapan Hegde
fonte
Caro downvoter, Justifique por que esta resposta diminuiu?
Tapan Hegde 28/01
Não diminuí a votação, mas percebo que isso não responde à pergunta nem fornece informações úteis que o OP possa usar para resolver o problema.
TheAmigo
0

Existem 2 maneiras de instalar qualquer pacote com a versão: - A). pip install -Iv package-name == versão B). pip install -v nome do pacote == versão

Para

Aqui, se você estiver usando a opção -I durante a instalação (quando não souber se o pacote já está instalado) (como 'pip install -Iv pyreadline == 2. *' ou algo parecido), você estaria instalando um novo pacote separado com o mesmo pacote existente com uma versão diferente.

Para B

  1. A princípio, convém verificar se não há requisitos quebrados. verificação de pip

2.e veja o que já está instalado pela lista de pip

3.se a lista de pacotes contiver qualquer pacote que você deseja instalar com uma versão específica, a melhor opção é desinstalar o pacote desta versão primeiro, desinstalando o pip nome do pacote

4. E agora você pode reinstalar o mesmo pacote com uma versão específica, instalando pip -v nome do pacote == versão, por exemplo, pip install -v pyreadline == 2. *

Samarth
fonte
0

Se você deseja atualizar para a versão mais recente e não sabe qual é a versão mais recente, pode digitar.

pip instala MySQL_python --upgrade

Isso atualizará o MySQL_python para a versão mais recente disponível, você pode usar para qualquer outra versão do pacote.

DilMac
fonte