Подтвердить что ты не робот

Проверьте, соответствуют ли текущие требования

Я использую pip файлы требований для сохранения моего списка зависимостей.

Я также стараюсь следовать рекомендациям по управлению зависимостями и предоставлять точные версии пакетов внутри файла требований. Например:

Django==1.5.1
lxml==3.0

Вопрос: Есть ли способ сказать, что в индексе пакетов Python имеются версии более новых версий пакетов для пакетов, перечисленных внутри requirements.txt?

В этом конкретном примере в настоящее время доступны последние версии 1.6.2 и 3.3.4 для Django и lxml соответственно.

Я пробовал pip install --upgrade -r requirements.txt, но он говорит, что все обновлено:

$ pip install --upgrade -r requirements.txt 
Requirement already up-to-date: Django==1.5.1 ...

Обратите внимание, что в этот момент я не хочу запускать фактическое обновление - я просто хочу посмотреть, есть ли доступные обновления.

4b9b3361

Ответ 1

Пип имеет встроенную функциональность. Предполагая, что вы находитесь внутри своего виртуального типа:

$ pip list --outdated
psycopg2 (Current: 2.5.1 Latest: 2.5.2)
requests (Current: 2.2.0 Latest: 2.2.1)

$ pip install -U psycopg2 requests

После этого будут загружены и установлены новые версии psycopg2 и запросов. Тогда:

$ pip freeze > requirements.txt

И все готово. Это не одна команда, но преимущество в том, что вам не нужны внешние зависимости.

Ответ 2

Просто нашел пакет python специально для задачи - piprot со следующим слоганом:

How rotten are your requirements?

Очень просто работать с:

$ piprot requirements.txt 
Django (1.5.1) is 315 days out of date. Latest is 1.6.2
lxml (3.0) is 542 days out of date. Latest is 3.3.4
Your requirements are 857 days out of date

Также вы можете выполнить команду "pipe" pip freeze to piprot, чтобы она могла фактически проверить, насколько гнилые пакеты, установленные в вашей песочнице/виртуальной среде:

pip freeze | piprot

Надеюсь, что это поможет кому-то в будущем.

Ответ 3

Поскольку вы упомянули, что вам нравится следовать лучшим практикам, я предполагаю, что вы тоже используете virtualenv, правильно? Предположим, что это так, и поскольку вы уже закрепляете свои пакеты, есть инструмент под названием pip-tools, которые вы можете выполнить против вашего virtualenv, чтобы проверить наличие обновлений.

Есть нижняя сторона, и почему я упомянул об использовании virtualenv, хотя.

[инструмент] проверяет PyPI и сообщает о доступных обновлениях. Он использует список в настоящее время установлены пакеты для проверки обновлений, он не использует никаких requirements.txt

Если вы запустите его в своем виртуальном каталоге, вы можете легко увидеть, какие пакеты имеют обновления, доступные для вашей текущей активной среды. Однако, если вы не используете virtualenv, вероятно, лучше не запускать его против системы, так как ваши другие проекты могут зависеть от разных версий (или могут плохо работать с обновленной версией, даже если они все работают в данный момент).

Из предоставленной документации использование простое. pip-review показывает вам, какие обновления доступны, но не устанавливает их.

$ pip-review
requests==0.13.4 available (you have 0.13.2)
redis==2.4.13 available (you have 2.4.9)
rq==0.3.2 available (you have 0.3.0)

Если вы хотите также автоматически установить, инструмент тоже может справиться с этим: $ pip-review --auto. Существует также переключатель --interactive, который можно использовать для выборочного обновления пакетов.

Как только все это будет сделано, pip-tools предоставляет способ обновления вашего требования. txt с новейшими версиями: pip-dump. Опять же, это работает против текущей активной среды, поэтому рекомендуется использовать ее в virtualenv.

Установка проекта может быть выполнена с помощью pip install pip-tools.

Примечание автора: Я использовал это для небольших проектов Django и был очень доволен этим. Однако обратите внимание, что если вы установите pip-tools в свою виртуальную среду, при запуске pip-dump вы обнаружите, что он добавляется в ваш файл требований .txt. Поскольку мои проекты небольшие, я всегда просто удалял эту строку вручную. Если у вас есть какая-либо сборка script, вы можете автоматически ее отключить до развертывания.

Ответ 4

Вы можете просто сделать что-то подобное в своем env (виртуальном или не виртуальном):

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'