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

Tell pip установить зависимости пакетов, перечисленных в файле требований

Разработка веб-приложения Django, у меня есть список пакетов, которые мне нужно установить в virtualenv. Скажи:

Django==1.3.1
--extra-index-url=http://dist.pinaxproject.com/dev/
Pinax==0.9b1.dev10
git+git://github.com/pinax/[email protected]90
# and other packages

Сначала я устанавливал их вручную, один за другим, по разработке. Это установило необходимые зависимости, и я, наконец, использовал pip freeze перед развертыванием приложения.

Проблема в том, что при обновлении некоторых пакетов некоторые зависимости больше не используются и не требуются, но они сохраняются в списке pip freeze.

Теперь я хотел бы создать новый virtualenv следующим образом:

  • поместите необходимые пакеты (без их зависимостей) в файл требований,
    например manual-requirements.txt
  • установить их со своими зависимостями
    pip install -r manual-requirement.txt (← проблема, это не устанавливает зависимости)
  • заморозить полный virtualenv
    pip freeze -r manual-requirements.txt > full-requirements.txt
    и развертывания.

Любой способ сделать это без ручной переустановки пакетов в новом virtualenv для получения их зависимостей? Это было бы подвержено ошибкам, и я хотел бы автоматизировать процесс очистки виртуальных серверов от ненужных старых зависимостей.

edit:, на самом деле, pip устанавливает зависимости, явно не перечисленные в файле требований, даже если документация сообщает нам, что такие файлы плоские. Я ошибался в отношении того, какие зависимости я ожидал установить. Я дам этот вопрос кому-нибудь, кто сомневается в том, что pip не устанавливает все зависимости.

4b9b3361

Ответ 1

Учитывая ваш комментарий к вопросу (где вы говорите, что выполнение установки для одного пакета работает так, как ожидалось), я бы предложил выполнить цикл над вашим файлом требований. В bash:

#!/bin/sh
while read p; do
  pip install $p
done < requirements.pip

НТН!

Ответ 2

просто, используйте:

pip install -r requirement.txt

он может установить все перечисленные в файле требований.

Ответ 3

Любой способ сделать это без ручной переустановки пакетов в новом virtualenv для получения их зависимостей? Это было бы подвержено ошибкам, и я хотел бы автоматизировать процесс очистки виртуальных серверов от ненужных старых зависимостей.

Что для пакета пип-инструментов (от https://github.com/nvie/pip-tools):

Установка

$ pip install --upgrade pip  # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools

Пример использования для pip-compile

Предположим, что у вас есть проект Flask и вы хотите его вывести для производства. Напишите в файл следующую строку:

# requirements.in
Flask

Теперь запустите команду pip-compile requirements.in:

$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
#    pip-compile requirements.in
#
flask==0.10.1
itsdangerous==0.24        # via flask
jinja2==2.7.3             # via flask
markupsafe==0.23          # via jinja2
werkzeug==0.10.4          # via flask

И он создаст ваш requirements.txt, при этом все зависимостей Flask (и все базовые зависимости) будут закреплены. Поместите этот файл под контроль версий и периодически запустите pip-compile, чтобы обновить пакеты.

Пример использования для pip-sync

Теперь, когда у вас есть requirements.txt, вы можете использовать pip-sync для обновления своего виртуального env, чтобы точно отразить то, что там. Примечание. Это приведет к установке/обновлению/удалению всего необходимого, чтобы соответствовать содержимому requirements.txt.

$ pip-sync
Uninstalling flake8-2.4.1:
  Successfully uninstalled flake8-2.4.1
Collecting click==4.1
  Downloading click-4.1-py2.py3-none-any.whl (62kB)
    100% |████████████████████████████████| 65kB 1.8MB/s
  Found existing installation: click 4.0
    Uninstalling click-4.0:
      Successfully uninstalled click-4.0
Successfully installed click-4.1

Ответ 4

Расширяя ответ петра, если вам также нужен способ выяснить, что поместить в requirements.in, вы можете сначала использовать pip-chill, чтобы найти минимальный набор необходимых пакетов, которые у вас есть. Комбинируя эти инструменты, вы можете показать причину зависимости, по которой установлен каждый пакет. Полный цикл выглядит следующим образом:

  1. Создать виртуальную среду:
    $ python3 -m venv venv
  2. Активируйте его:
    $ . venv/bin/activate
  3. Установите новейшую версию pip, pip-tools и pip-chill:
    (venv)$ pip install --upgrade pip
    (venv)$ pip install pip-tools pip-chill
  4. Создайте свой проект, установите больше пакетов pip и т.д., Пока не захотите сохранить...
  5. Извлечь минимальный набор пакетов (т.е. верхнего уровня без зависимостей):
    (venv)$ pip-chill --no-version > requirements.in
  6. Скомпилируйте список всех необходимых пакетов (с указанием причин зависимости):
    (venv)$ pip-compile requirements.in
  7. Убедитесь, что текущая установка синхронизирована со списком:
    (venv)$ pip-sync