Учитывая имя пакета Python, который можно установить с помощью pip , есть ли способ узнать список всех возможных версий, которые может установить pip? Прямо сейчас это метод проб и ошибок.
Я пытаюсь установить версию для сторонней библиотеки, но последняя версия слишком новая, были внесены несовместимые изменения. Поэтому я хотел бы получить список всех версий, о которых знает pip, чтобы я мог их протестировать.
pip install pylibmc==
идеальным.Ответы:
(обновление: по состоянию на март 2020 года многие люди сообщали, что установленный с помощью желтка
pip install yolk3k
возвращает только последнюю версию. Ответ Криса, похоже, получил наибольшее количество голосов и работал для меня)Скрипт на pastebin работает. Однако это не очень удобно, если вы работаете с несколькими средами / хостами, потому что вам придется копировать / создавать его каждый раз.
Лучшим универсальным решением было бы использовать yolk3k , который можно установить с помощью pip. Например, чтобы увидеть, какие версии Django доступны:
yolk3k
это форк оригинала,yolk
который прекратил разработку в 2012 году . Хотяyolk
больше не поддерживается (как указано в комментариях ниже),yolk3k
похоже, поддерживает Python 3 и поддерживает его.Примечание: я не участвую в разработке yolk3k. Если что-то работает не так, как надо, оставленный здесь комментарий не должен иметь большого значения. Вместо этого используйте средство отслеживания ошибок yolk3k и рассмотрите возможность отправки исправления, если это возможно.
источник
Для пипса> = 9.0 используйте
- все доступные версии будут распечатаны без фактической загрузки или установки каких-либо дополнительных пакетов.
Для пипса <9.0 используйте
где
blork
может быть любая строка, которая не является допустимым номером версии .источник
pip install --only-binary :all: pylibmc
будут перечислены все версии pylibmc, доступные в виде бинарных пакетов.pip install pylibmc==9999999 | tr ', ' "\n" | sort -n
Обновление: по
состоянию на сентябрь 2017 г. этот метод больше не работает:
--no-install
был удален в пипе 7Используйте
pip install -v
, вы можете увидеть все версии, которые доступныЧтобы не устанавливать какой-либо пакет, используйте одно из следующих решений:
или
Протестировано с пипом 1.0
источник
pip 1.5.4
даетDEPRECATION: --no-install, --no-download, --build, and --no-clean are deprecated. See https://github.com/pypa/pip/issues/906.
и не показывает доступные версии для пакетов, которые уже установлены.-v
. Остальная часть моего ответа - чтобы избежать эффекта сложения (установка / загрузка). Для установленного pkg просто добавьте --upgrade. Anw, вы можете создать отдельный virtualenv, чтобы сделать все проще.no such option: --no-install
Вам не нужен сторонний пакет для получения этой информации. Pypi предоставляет простые потоки JSON для всех пакетов в
Вот некоторый код Python, использующий только стандартную библиотеку, которая получает все версии.
Код напечатан (по состоянию на 23 февраля 2015 г.):
источник
versions = [x for x in data["releases"] if any([y["python_version"] in ['cp26', '2.6'] for y in data["releases"][x]])]
находил версии, совместимые с Python 2.6. (Я нигде не виделcp26
, но некоторые пакеты были,cp27
поэтому я предполагаю, что это может существовать в других пакетах.)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
исключение для некоторых пакетов, которые следуют не очень строгим схемам управления версиями. Чтобы исправить это для этих пакетов, посмотрите эту суть .Я придумал простой сценарий bash. Спасибо автору jq .
источник
curl
до работы, возможно, из-за ошибок сертификата.wget --no-check-certificate
работает, но дажеcurl -k --insecure
ничего не выдает. Предупреждение я сwget
говоритERROR: certificate common name `www.python.org´ doesn´t match requested host name `pypi.python.org´.
sort -V
Не работает на OSX с версией доморощенного оjq
Вы могли бы пакет yolk3k вместо желтка. yolk3k - это форк из оригинального желтка, и он поддерживает как python2, так и 3.
https://github.com/myint/yolk
источник
yolk -V attest
Attest 0.5.3
Посмотрев некоторое время на код pip, похоже, что код, отвечающий за поиск пакетов, можно найти в
PackageFinder
классе вpip.index
. Его методfind_requirement
ищет версииInstallRequirement
, но, к сожалению, возвращает только самую последнюю версию.Приведенный ниже код является почти 1: 1 копией оригинальной функции, при этом возвращаемая строка в строке 114 изменена для возврата всех версий.
Сценарий ожидает одно имя пакета в качестве первого и единственного аргумента и возвращает все версии.
http://pastebin.com/axzdUQhZ
Я не могу гарантировать правильность, так как я не знаком с кодом pip. Но, надеюсь, это поможет.
Образец вывода
Код:
источник
Вы можете использовать этот небольшой скрипт Python 3 (используя только стандартные библиотечные модули), чтобы получить список доступных версий для пакета из PyPI с помощью JSON API и распечатать их в обратном хронологическом порядке. В отличие от некоторых других решений Python, опубликованных здесь, это не нарушает свободные версии, такие как
django
's '2.2rc1
илиuwsgi
's'2.0.17.1
:Сохраните скрипт и запустите его с именем пакета в качестве аргумента, например:
источник
https://pypi.python.org/pypi/Django/ - работает с пакетами, сопровождающие которых хотят показывать все пакеты. https://pypi.python.org/simple/pip/ - все равно нужно делать то же самое (перечислены все ссылки).
источник
Это работает для меня на OSX:
Возвращает список по одному в строке:
Или получить последнюю доступную версию:
Имейте в виду,
gsort
должен быть установлен (на OSX) для анализа версий. Вы можете установить его сbrew install coreutils
источник
Мой проект
luddite
имеет эту функцию.Пример использования:
В нем перечислены все доступные версии пакета, запросив API-интерфейс json по адресу https://pypi.org/.
источник
requirements.txt
файлов на устаревшие пакеты. Это больше, чем пара строк кода. Чтобы проверитьrequirements.txt
файл, вам нужна функциональность для перечисления всех версий пакета. Эта часть намеренно отделена и является частью публичного API luddite. И это исходная Apache License 2.0, я думаю, что это не совсем справедливо называть «программным пакетом черного ящика».У меня не было никакой удачи с
yolk
,yolk3k
или ,pip install -v
но так что я в конечном итоге с помощью этого (адаптировано к Python 3 из ответа Эриком Чанга):источник
StrictVersion
не будет работать для многих пакетов (django
,uwsgi
,psycopg2
чтобы назвать несколько). Вы можете использоватьparse_version()
отsetuptools
(см. Мой ответ для примера).Альтернативное решение - использовать API хранилища:
https://warehouse.readthedocs.io/api-reference/json/#release
Например, для колбы:
напечатает:
источник
Простой
bash
скрипт, который полагается только наpython
себя (я предполагаю, что в контексте вопроса он должен быть установлен) и один изcurl
илиwget
. Предполагается, что у вас установленsetuptools
пакет для сортировки версий (почти всегда установлен). Он не зависит от внешних зависимостей, таких как:jq
который может не присутствовать;grep
иawk
это может вести себя по-разному в Linux и macOS.Чуть более длинная версия с комментариями.
Поместите имя пакета в переменную:
Получить версии (используя
curl
):Получить версии (используя
wget
):Распечатать отсортированные версии:
источник
Мое мнение - это комбинация нескольких опубликованных ответов с некоторыми изменениями, облегчающими их использование в работающей среде Python.
Идея состоит в том, чтобы предоставить совершенно новую команду (смоделированную после команды установки), которая дает вам экземпляр искателя пакетов для использования. Положительным моментом является то, что он работает и использует любые индексы, которые поддерживает pip, и читает ваши локальные файлы конфигурации pip, поэтому вы получите правильные результаты, как при обычной установке pip.
Я попытался сделать его совместимым как с pip v 9.x, так и с 10.x .., но попробовал только на 9.x
https://gist.github.com/kaos/68511bd013fcdebe766c981f50b473d4
Пример вывода
источник