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

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

Django==1.3.1
--extra-index-url=http://dist.pinaxproject.com/dev/
Pinax==0.9b1.dev10
git+git://github.com/pinax/pinax-theme-bootstrap.git@cff4f5bbe9f87f0c67ee9ada9aa8ae82978f9890
# and other packages

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

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

теперь я хотел бы создать новый виртуальное окружение таким образом:

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

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

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

3 ответов


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

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

HTH!


simplifily, использовать:

pip install -r requirement.txt

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


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

что это pip-tools пакет для (Из https://github.com/nvie/pip-tools):

установка

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

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

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

# requirements.in
Flask

теперь запустите pip-compile требования.в:

$ 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, со всеми зависимостями колбы (и всеми базовыми зависимостями). Поместите этот файл под контроль версий, а также и периодически повторно запустить 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