Biorąc pod uwagę nazwę pakietu Python, który można zainstalować za pomocą pip , czy jest jakiś sposób, aby znaleźć listę wszystkich możliwych wersji, które pip mógłby zainstalować? W tej chwili jest to próba i błąd.
Próbuję zainstalować wersję dla biblioteki innej firmy, ale najnowsza wersja jest zbyt nowa, wprowadzono zmiany niezgodne wstecz. Chciałbym więc w jakiś sposób wyświetlić listę wszystkich wersji, o których wie pip, aby móc je przetestować.
pip install pylibmc==
jest idealna.Odpowiedzi:
(aktualizacja: od marca 2020 r. wiele osób zgłosiło, że żółtko zainstalowane za pomocą
pip install yolk3k
zwraca tylko najnowszą wersję. Odpowiedź Chrisa wydaje się mieć najwięcej pozytywnych opinii i działała dla mnie)Skrypt w pastebin działa. Jednak nie jest to zbyt wygodne, jeśli pracujesz z wieloma środowiskami / hostami, ponieważ będziesz musiał go kopiować / tworzyć za każdym razem.
Lepszym uniwersalnym rozwiązaniem byłoby użycie yolk3k , który można zainstalować za pomocą pip. Np. Aby zobaczyć, jakie wersje Django są dostępne:
yolk3k
jest rozwidleniem oryginału,yolk
który zaprzestał opracowywania w 2012 roku . Chociażyolk
nie jest już utrzymywany (jak wskazano w komentarzach poniżej),yolk3k
wydaje się, że jest i obsługuje Python 3.Uwaga: Nie jestem zaangażowany w rozwój yolk3k. Jeśli coś nie działa tak, jak powinno, zostawienie komentarza nie powinno mieć większego znaczenia. Zamiast tego użyj narzędzia do śledzenia problemów yolk3k i rozważ przesłanie poprawki, jeśli to możliwe.
źródło
Dla pip> = 9.0 użyj
- wszystkie dostępne wersje zostaną wydrukowane bez pobierania lub instalowania jakichkolwiek dodatkowych pakietów.
Dla pip <9.0 użycia
gdzie
blork
może być dowolny ciąg znaków, który nie jest prawidłowym numerem wersji .źródło
pip install --only-binary :all: pylibmc
wyświetli listę wszystkich wersji pylibmc dostępnych jako pakiety binarne.pip install pylibmc==9999999 | tr ', ' "\n" | sort -n
Aktualizacja:
od września 2017 r. Ta metoda już nie działa:
--no-install
została usunięta w pip 7Użyj
pip install -v
, możesz zobaczyć wszystkie dostępne wersjeAby nie instalować żadnego pakietu, użyj jednego z następujących rozwiązań:
lub
Testowane z pip 1.0
źródło
pip 1.5.4
dajeDEPRECATION: --no-install, --no-download, --build, and --no-clean are deprecated. See https://github.com/pypa/pip/issues/906.
i nie pokazuje dostępnych wersji pakietów, które są już zainstalowane.-v
. Reszta mojej odpowiedzi dotyczy unikania efektu dodania (instalacja / pobieranie). Aby zainstalować pkg, po prostu dodaj --upgrade. W każdym razie możesz utworzyć osobną wirtualną platformę, aby wszystko było prostsze.no such option: --no-install
Aby uzyskać te informacje, nie potrzebujesz pakietu innej firmy. pypi zapewnia proste kanały JSON dla wszystkich pakietów poniżej
Oto trochę kodu Pythona używającego tylko standardowej biblioteki, która pobiera wszystkie wersje.
Ten kod jest drukowany (na dzień 23 lutego 2015 r.):
źródło
versions = [x for x in data["releases"] if any([y["python_version"] in ['cp26', '2.6'] for y in data["releases"][x]])]
znajdowałem wersje kompatybilne z Python 2.6. (cp26
Nigdzie nie widziałem , ale niektóre pakiety miały,cp27
więc spekuluję, że może istnieć w innych pakietach.)curl -s https://pypi.python.org/pypi/{PKG_NAME}/json | jq -r '.releases | keys[]' | sort -t. -k 1,1n -k 2,2n -k 3,3n
ValueError
wyjątek dla niektórych pakietów, które przestrzegają niezbyt ścisłych schematów kontroli wersji. Aby to naprawić w przypadku tych pakietów, zobacz tę treść .Wymyśliłem prosty skrypt bash. Dzięki autorowi jq .
źródło
curl
do pracy, prawdopodobnie z powodu błędów certyfikatu.wget --no-check-certificate
działa, ale nawetcurl -k --insecure
nic nie produkuje. Ostrzeżenie, które otrzymuję,wget
mówiERROR: certificate common name `www.python.org´ doesn´t match requested host name `pypi.python.org´.
sort -V
Nie działa na OSX z wersji homebrew dniajq
Możesz użyć pakietu yolk3k zamiast żółtka. yolk3k jest rozwidleniem oryginalnego żółtka i obsługuje zarówno python2, jak i 3.
https://github.com/myint/yolk
źródło
yolk -V attest
Attest 0.5.3
Po dłuższym spojrzeniu na kod pip wygląda na to, że kod odpowiedzialny za lokalizowanie pakietów można znaleźć w
PackageFinder
klasie wpip.index
. Ta metodafind_requirement
wyszukuje wersjeInstallRequirement
, ale niestety zwraca tylko najnowszą wersję.Poniższy kod jest prawie kopią 1: 1 oryginalnej funkcji, a zwrot w wierszu 114 został zmieniony, aby zwrócić wszystkie wersje.
Skrypt oczekuje nazwy pierwszego pakietu jako jedynego argumentu i zwraca wszystkie wersje.
http://pastebin.com/axzdUQhZ
Nie mogę zagwarantować poprawności, ponieważ nie znam kodu pip. Ale mam nadzieję, że to pomaga.
Próbka wyjściowa
Kod:
źródło
Możesz użyć tego małego skryptu Python 3 (używając tylko standardowych modułów bibliotecznych), aby pobrać listę dostępnych wersji pakietu z PyPI przy użyciu JSON API i wydrukować je w odwrotnej kolejności chronologicznej. W odróżnieniu od innych rozwiązań Python zamieszczone tutaj, to nie łamie się na luźnych wersjach, takich jak
django
„s2.2rc1
lubuwsgi
” s2.0.17.1
:Zapisz skrypt i uruchom go z nazwą pakietu jako argumentem, np .:
źródło
https://pypi.python.org/pypi/Django/ - działa dla pakietów, których opiekunowie wybierają wyświetlanie wszystkich pakietów https://pypi.python.org/simple/pip/ - i tak powinien załatwić sprawę (wyświetla listę wszystkich linków)
źródło
Działa to dla mnie w OSX:
Zwraca listę jeden w wierszu:
Lub, aby uzyskać najnowszą wersję dostępną:
Należy pamiętać, że
gsort
musi być zainstalowany (w OSX), aby analizować wersje. Możesz go zainstalować za pomocąbrew install coreutils
źródło
Mój projekt
luddite
ma tę funkcję.Przykładowe użycie:
Wyświetla listę wszystkich dostępnych wersji pakietu, wysyłając zapytanie do json API https://pypi.org/
źródło
requirements.txt
plików pod kątem nieaktualnych pakietów. To więcej niż kilka wierszy kodu. Aby sprawdzićrequirements.txt
plik, potrzebujesz funkcji, aby wyświetlić listę wszystkich wersji pakietów. Ta część jest celowo oddzielona i stanowi część publicznego interfejsu API luddite. I jest to źródłowa licencja Apache 2.0, myślę, że nie jest tak uczciwie nazywać to pakietem oprogramowania „czarnej skrzynki”.I nie ma żadnego szczęścia
yolk
,yolk3k
czypip install -v
jednak tak skończyło się za pomocą tego (dostosowany do Python 3 z odpowiedzią Eric Chianga):źródło
StrictVersion
nie będzie pracować dla wielu pakietów (django
,uwsgi
,psycopg2
aby wymienić tylko kilka). Możesz użyćparse_version()
zsetuptools
(patrz moja odpowiedź na przykład).Alternatywnym rozwiązaniem jest użycie interfejsów API hurtowni:
https://warehouse.readthedocs.io/api-reference/json/#release
Na przykład dla Flask:
wydrukuje:
źródło
Prosty
bash
skrypt, który polega tylko napython
sobie (zakładam, że w kontekście pytania powinien zostać zainstalowany) i jedencurl
lubwget
. Zakłada się, że maszsetuptools
zainstalowany pakiet do sortowania wersji (prawie zawsze zainstalowany). Nie opiera się na zewnętrznych zależnościach, takich jak:jq
które mogą nie być obecne;grep
iawk
to może zachowywać się inaczej w systemie Linux i macOS.Trochę dłuższa wersja z komentarzami.
Umieść nazwę pakietu w zmiennej:
Pobierz wersje (za pomocą
curl
):Pobierz wersje (za pomocą
wget
):Drukuj posortowane wersje:
źródło
Moje podejście jest kombinacją kilku opublikowanych odpowiedzi, z pewnymi modyfikacjami, aby ułatwić ich użycie z działającego środowiska python.
Chodzi o to, aby dostarczyć zupełnie nowe polecenie (wzorowane na poleceniu install), które daje instancję wyszukiwarki pakietów do użycia. Zaletą jest to, że współpracuje i wykorzystuje wszystkie indeksy, które pip obsługuje i odczytuje lokalne pliki konfiguracyjne pip, dzięki czemu otrzymujesz prawidłowe wyniki, tak jak w przypadku normalnej instalacji pip.
Podjąłem próbę uczynienia go kompatybilnym zarówno z pipem v. 9.x jak i 10.x .., ale wypróbowałem go tylko na 9.x
https://gist.github.com/kaos/68511bd013fcdebe766c981f50b473d4
Przykładowe dane wyjściowe
źródło