Instalowanie określonych wersji pakietów za pomocą pip


1311

Próbuję zainstalować wersję 1.2.2 adaptera MySQL_python, używając świeżego virtualenv utworzonego z tą --no-site-packagesopcją. Obecna wersja pokazana w PyPi to 1.2.3 . Czy istnieje sposób na zainstalowanie starszej wersji? Znalazłem artykuł stwierdzający, że należy to zrobić:

pip install MySQL_python==1.2.2

Jednak po zainstalowaniu nadal wyświetla się MySQL_python-1.2.3-py2.6.egg-infow pakietach witryny. Czy jest to problem specyficzny dla tego pakietu, czy robię coś złego?


16
Dzięki za podpowiedź, to działało dla mnie, aby zainstalować starszą wersję openpyxl przezpip install MySQL_python==1.8.9
tim

4
Tak, działało to również w przypadku pand, dzięki:pip install -Iv pandas==0.12.0
tandy

1
pracował również dla mnie: pip install xvfbwrapper == 0.2.4
amitdatta

Odpowiedzi:


893

TL; DR:

  • pip install -Iv(tj. pip install -Iv MySQL_python==1.2.2)

Po pierwsze, widzę dwa problemy z tym, co próbujesz zrobić. Ponieważ masz już zainstalowaną wersję, odinstaluj istniejący sterownik lub użyj gopip install -I MySQL_python==1.2.2

Jednak wkrótce przekonasz się, że to nie działa. Jeśli spojrzysz na dziennik instalacji pip, lub jeśli to zrobisz pip install -Iv MySQL_python==1.2.2, przekonasz się, że link URL PyPI nie działa dla MySQL_python v1.2.2. Możesz to sprawdzić tutaj: http://pypi.python.org/pypi/MySQL-python/1.2.2

Link do pobrania 404 i linki zastępczego adresu URL przekierowują nieskończenie ze względu na ostatnią aktualizację sourceforge.net i nieaktualny adres URL PyPI.

Aby poprawnie zainstalować sterownik, możesz wykonać następujące kroki:

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
Nie powinno być problemu z posiadaniem wielu wersji, to jest sens tworzenia nowych folderów dla każdej wersji i używania plików .pth.
Jochen Ritzel

3
To instaluje poprawną wersję, więc jest odpowiedzią na to pytanie - dziękuję za pomoc. Naciśnięcie teraz innego problemu: „błąd: polecenie '/usr/bin/gcc-4.2” nie powiodło się ze statusem wyjścia 1 ”podczas budowania rozszerzenia„ _mysql ”. Wiem, że mam GCC, a instalacja MySQL_python 1.2.3 przebiega bezproblemowo. Czy inni widzieli ten problem, szczególnie w wersji 1.2.2?
Joe

Zadaj kolejne pytanie i opublikuj komunikat o błędzie otrzymany z pip.
Mahmoud Abdelkader


4
Ciekawe, dlaczego korzystasz z opcji -I, jeśli już usunęliśmy istniejącą instalację - czy możesz podać trochę szczegółów na ten temat?
Joe

509

Możesz nawet użyć zakresu wersji z pip installpoleceniem. Coś takiego:

pip install 'stevedore>=1.3.0,<1.4.0'

A jeśli pakiet jest już zainstalowany i chcesz go obniżyć, dodaj --force-reinstall:

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

128
na przykład: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank

1
doskonały! działał na Ubunto 15.04 i (automatycznie) zastąpił istniejącą bibliotekę określoną wersją. Rozwiązałem wszystkie moje problemy!
zevij

2
Wspomnę tylko, że w Pythonie 2 musiałem używać podwójnych cudzysłowów „zamiast”
Prime_Aqasix

6
@ HandofC'thuhlu, myślę, że musimy używać podwójnych cudzysłowów dla systemu Windows, a nie Python 2
SmartManoj

3
Używaj podwójnych cudzysłowów w systemie Windows: pip install "stevedore> = 1.3.0, <1.4.0"
jmng

139

Jednym ze sposobów, jak zasugerowano w tym poście , jest podanie wersji pipjako:

pip install -Iv MySQL_python==1.2.2

tzn. użyj ==i podaj numer wersji, aby zainstalować tylko tę wersję. -I, --ignore-installedignoruje już zainstalowane pakiety.


1
Strzec się! Miałem doświadczenie, że instalowało to różne wersje obok siebie ! Co ciekawe, pip listnie był tego świadomy, ale conda listbył (i wyświetlał różne wersje pakietów). To także całkowicie pomieszało Pycharm .
Lionel Trebuchon

66

Aby zainstalować konkretną wersję pakietu Pythona, bez względu na to, czy jest to pierwszy raz, użyj uaktualnienia lub obniżenia wersji:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python wersja 1.2.2 nie jest dostępna, więc użyłem innej wersji. Aby wyświetlić wszystkie dostępne wersje pakietów z indeksu, wyklucz wersję:

pip install MySQL_python==

4
W przypadku pip 10.0.1 jest to jedyne działające rozwiązanie. Opcja „-I” faktycznie ponownie instaluje poprzednią wersję.
FedFranzoni

38

Wierzę, że jeśli masz już zainstalowany pakiet, pip nie zastąpi go inną wersją. Użyj, -Iaby zignorować poprzednie wersje.


1
Nie mam go zainstalowanego - używając świeżego virtualenv utworzonego za pomocą opcji --no-site-packages
Joe

2
dobrze, więc pytasz o wersję 1.2.2, a ona nadal instaluje 1.2.3 i nic więcej nie zostało zainstalowane? Użyta składnia jest poprawna do pobierania określonych wersji.
dappawit,

„przy użyciu nowego virtualenv utworzonego za pomocą opcji --no-site-packages”; może być konieczne poprzedzenie tego polecenia unset PYTHONPATH, aby nie pipwyświetlać preinstalowanych bibliotek
user5359531,

17

Czasami poprzednio zainstalowana wersja jest buforowana.

~$ pip install pillow==5.2.0

Zwraca następujące
wymagania : Wymagania już spełnione: poduszka == 5.2.0 w /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

Możemy użyć --no-cache-dir razem z -I, aby to zastąpić

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

5

Ponieważ okazało się, że jest to przełomowa zmiana wprowadzona w wersji 10 pip, obniżyłem wersję do kompatybilnej:

pip install 'pip<10' 

To polecenie mówi pipowi, aby zainstalował wersję modułu niższą niż wersja 10. Zrób to w virutalenv, aby nie spieprzyć instalacji Pythona w witrynie.


5

Niedawno wpadł problem przy korzystaniu pip„s -Iflagę że chciałem gdzieś dokumentu:

-Ibędzie nie odinstalować istniejący pakiet przed postępowaniem; po prostu zainstaluje go na starym. Oznacza to, że wszystkie pliki, które powinny zostać usunięte między wersjami, pozostaną na miejscu. Może to powodować dziwne zachowanie, jeśli pliki te mają wspólne nazwy z innymi zainstalowanymi modułami.

Załóżmy na przykład, że istnieje pakiet o nazwie package. W jednym z packageplików używają import datetime. Teraz, w package@2.0.0, wskazuje to na standardowy datetimemoduł biblioteki , ale w package@3.0.0dodali lokalny datetime.pyjako zamiennik standardowej wersji biblioteki (z dowolnego powodu).

Powiedzmy teraz, że uruchamiam pip install package==3.0.0, ale potem zdaję sobie sprawę, że naprawdę chciałem wersji 2.0.0. Jeśli teraz uruchomię pip install -I package==2.0.0, stary datetime.pyplik nie zostanie usunięty, więc wszelkie wywołania do import datetimezaimportują niewłaściwy moduł.

W moim przypadku objawiało się to dziwnymi błędami składniowymi, ponieważ nowsza wersja pakietu dodała plik, który był zgodny tylko z Python 3, a kiedy obniżyłem wersje pakietów do obsługi Python 2, kontynuowałem importowanie modułu tylko do Python-3.

Na tej podstawie argumentowałbym, że odinstalowanie starego pakietu jest zawsze lepsze niż -Ipodczas aktualizacji zainstalowanych wersji pakietu.


3

To polecenie poniżej działało dla mnie

Wersja Python - 2.7

pakiet - python-jenkins

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


Szanowny downvoter, proszę uzasadnić, dlaczego ta odpowiedź została odrzucona?
Tapan Hegde

Nie przegłosowałem, ale widzę, że to nie odpowiada na pytanie, ani nie dostarcza żadnych pomocnych informacji, które OP może wykorzystać do rozwiązania problemu.
TheAmigo

0

Istnieją dwa sposoby instalacji dowolnego pakietu z wersją: - A). pip install -Iv nazwa-pakietu == wersja B). pip install -v nazwa-pakietu == wersja

Dla

Tutaj, jeśli używasz opcji -I podczas instalacji (gdy nie wiesz, czy pakiet jest już zainstalowany) (np. 'Pip install -Iv pyreadline == 2. *' lub coś takiego), instalowałbyś nowy oddzielny pakiet z tym samym istniejącym pakietem o innej wersji.

Dla B.

  1. Na początku możesz sprawdzić, czy nie ma złamanych wymagań. czek pip

2. a następnie zobacz, co jest już zainstalowane przez listę pip

3. jeśli lista pakietów zawiera jakikolwiek pakiet, który chcesz zainstalować z określoną wersją, lepszym rozwiązaniem jest odinstalowanie pakietu tej wersji w pierwszej kolejności za pomocą polecenia pip uninstall nazwa-pakietu

4. A teraz możesz ponownie zainstalować ten sam pakiet z określoną wersją, pip install -v nazwa-pakietu == wersja np. Pip install -v pyreadline == 2. *


0

Jeśli chcesz zaktualizować do najnowszej wersji i nie wiesz, jaka jest najnowsza wersja, możesz wpisać.

pip zainstaluj MySQL_python --upgrade

Spowoduje to zaktualizowanie MySQL_python dla najnowszej dostępnej wersji, której można użyć dla dowolnej innej wersji pakietu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.