скажите 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