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

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

<code>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
</code>

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

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

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

put the needed packages (without their dependencies) in a requirement file,
like manual-requirements.txt install them with their dependencies
pip install -r manual-requirement.txt (← problem, this does not install the dependencies) freeze the full virtualenv
pip freeze -r manual-requirements.txt > full-requirements.txt
and deploy.

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

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

 Piotr Dobrogost18 июл. 2017 г., 23:13
Как ответ @mac, который вы пометили какaccepted не правильно, может быть, пришло время переоценить?
 Maxime R.26 апр. 2012 г., 16:16
Я знаю, что в конечном итоге использую точные версии для тестирования и развертывания. Моя проблема касается больше не нужного & quot; 2-го уровня & quot; зависимости после некоторых обновлений моего «1-го уровня» зависимостей. Я бы хотел с нуля перестроить полный список deps, чтобы отбросить то, что больше не нужно, и избежать каких-либо конфликтов.
 newtover26 апр. 2012 г., 16:04
Пока вы используете точные версии требуемых пакетов, в их зависимостях не должно быть никаких изменений. Но если вы не используете точные версии, как вы можете гарантировать, что ваше приложение все еще работает?
 Maxime R.26 апр. 2012 г., 16:03
Да, я перечислил их в manual-needs.txt. Проблема в том, что pip не устанавливает их зависимости (т. Е. «Второй уровень»), если я использую файл требований, когда они устанавливаются, если я вручнуюpip install django; pip install pinax; etc..
 mac26 апр. 2012 г., 15:00
Итак ... в чем конкретно проблема? Знаете ли вы, какой ваш "первый уровень"? зависимости?

Ответы на вопрос(3)

Решение Вопроса

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

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

НТН!

 26 апр. 2012 г., 18:18
@MaximeR. Не беспокойтесь, и спасибо, что приняли ответ! :)
 Maxime R.26 апр. 2012 г., 17:24
Да, это было намного быстрее, чем пытаться достичь этого только с помощью pip. Похоже, это не решило мою проблему, фактически, установка pip из файла требованийdoes установить незарегистрированные зависимости (что обнадеживает), но это позволило мне выяснить, что мой «1-й уровень» Список зависимостей был неполным: у одного из пакетов, которые я использую, нет перечисленных зависимостей, но вместо этого есть файл требований, который я использовал в прошлом месяце для настройки virtualenv. У Пипа не было возможности узнать это, и я тоже забыла об этом: мой плохой. Мои извинения, но спасибо за поддержку!

проще всего использовать:

pip install -r requirement.txt

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

 16 окт. 2017 г., 13:10
проголосовало 40 человек, не читающих актуальный вопрос ...
 02 нояб. 2016 г., 13:57
Как ОП явно знаетpip install -r (...) Я не знаю, на что это должно было ответить ...

w virtualenv to get their dependencies ? This would be error-prone and I'd like to automate the process of cleaning the virtualenv from no-longer-needed old dependencies.

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

Installation
$ pip install --upgrade pip  # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools
Example usage for pip-compile

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

# requirements.in
Flask

Теперь запустите требования pip-compile.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 обновить пакеты.

Example usage for pip-sync

Теперь, когда у вас естьrequirements.txt, ты можешь использоватьpip-sync обновить вашу виртуальную среду, чтобы точно отразить, что там. Примечание: это установит / обновит / удалит все необходимое для соответствия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

Ваш ответ на вопрос