Как указать порядок установки для Python pip? - PullRequest
49 голосов
/ 22 марта 2011

Я работаю с фабрикой (0.9.4) + pip (0.8.2), и мне нужно установить несколько модулей python для нескольких серверов. Все серверы имеют старую версию setuptools (0.6c8), которую необходимо обновить для модуля pymongo. Pymongo требует setuptools> = 0.6c9.

Моя проблема в том, что pip начинает установку с pymongo вместо setuptools, что приводит к остановке pip. Порядок перестановки модулей в файле требований, похоже, не помогает.

requirements.txt:

setuptools>=0.6c9
pymongo==1.9
simplejson==2.1.3

Есть ли способ указать порядок установки для pip, поскольку он сам по себе не делает этого правильно?

Это можно решить с помощью двух отдельных файлов требований, но было бы неплохо, если бы мне не нужно было поддерживать несколько файлов требований сейчас или в будущем.

Проблема сохраняется с пипом 0.8.3.

Ответы [ 9 ]

26 голосов
/ 22 ноября 2012

Вы можете просто использовать:

cat requirements.txt | xargs pip install
12 голосов
/ 22 марта 2011

Это глупый взлом, но может сработать.Напишите bash-скрипт, который построчно читает из вашего файла требований и запускает на нем команду pip.

#!/bin/bash
for line in $(cat requirements.txt)
do
  pip install $line -E /path/to/virtualenv
done
11 голосов
/ 23 марта 2015

Чтобы разрешить все типы записей (например, пакеты из репозиториев git) в файле needs.txt, вам необходимо использовать следующий набор команд

cat requirements.txt | xargs -n 1 -L 1 pip install
Опции

-n 1 и -L 1 необходимы для установки пакетов один за другим и обработки каждой строки в файле needs.txt как отдельного элемента.

8 голосов
/ 03 февраля 2014

К сожалению, предложение об обновлении не будет работать. Если вы прочитаете другие подробности в https://github.com/pypa/pip/issues/24, вы поймете, почему

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

numpy==1.7.1
scipy==0.13.2
statsmodels==0.5.0

Сборка statsmodels завершится неудачно со следующим оператором

ImportError: statsmodels requires numpy

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

5 голосов
/ 18 марта 2016

Pymongo требует setuptools> = 0.6c9

Откуда вы знаете?Требуется построить или установить?Вы не говорите, какую версию Pymongo вы пытались установить, но, глядя на файл setup.py для текущей (3.2.2) версии, нет ни спецификации, ни того, что Pymongo требует для запуска setup.py (setup_requires), ни того, что онатребует установки (install_requires).Без такой информации pip не может гарантировать конкретную версию setuptools.Если Pymongo требует конкретной версии setuptools для запуска setup.py (в отличие от необходимости, чтобы setuptools запускала саму функцию setup), то другая проблема заключается в том, что до недавнего времени не было способа указать это.Теперь есть спецификация - PEP 518 - Определение минимальных системных требований сборки для проектов Python , которые должны быть вскоре реализованы в pip - Реализация поддержки PEP 518 # 3691 .

Что касается порядка установки, это было исправлено в пипе 6.1.0;

С pip install - Порядок установки раздел документации пипа:

Начиная с версии 6.1.0, pip устанавливает зависимости перед их зависимостями, то есть в «топологическом порядке».Это единственное обязательство, которое в настоящее время выполняет пип, связанный с заказом.

и более поздние версии:

До версии 6.1.0 пип не принимал никаких обязательств относительно порядка установки.

Однако без надлежащей спецификации требований Pymongo это тоже не поможет.

4 голосов
/ 08 января 2016

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

grep -v "^#" requirements.txt | xargs pip install
4 голосов
/ 04 декабря 2014

Исходя из решения @ lukasrms - я должен был сделать это, чтобы получить пункт для установки моих требований по одному:

cat requirements.txt | xargs -n 1 pip install
1 голос
/ 23 марта 2011

Я закончил тем, что запустил pip внутри virtualenv вместо того, чтобы использовать «pip -E», потому что с -E pip все еще мог видеть пакеты сайтов серверов, и это явно испортило некоторые установки.

У меня также были проблемы с серверами без virtualenvs.Даже если я установил setuptools с отдельной командой pip, pymongo откажется быть установленным.

Я решил эту проблему, установив setuptools отдельно с помощью easy_install, так как это похоже на проблему между pip и setuptools.

фрагменты изfabfile.py:

env.activate = "source %s/bin/activate" % virtualenv_path

_virtualenv("easy_install -U setuptools")
_virtualenv("pip install -r requirements.txt")

def _virtualenv(command)
    if env.virtualenv:
        sudo(env.activate + "&&" + command)
    else:
        sudo(command)

У меня были эти проблемы с пипами 0.8.3 и 0.8.2.

0 голосов
/ 23 марта 2011

Извините, мой первый ответ был неверным, потому что у меня были setuptools> = 0.6c9.

Кажется, это невозможно, потому что pymongo setup.py требует setuptools> = 0.6c9, но pip только скачал setuptools> = 0.6c9, и еще не установлен.

Кто-то обсуждал это в проблеме, на которую я указывал ранее.

У меня есть собственная проблема, созданная несколько недель назад по этому поводу: Doне запускайте egg_info для каждого пакета в списке требований перед установкой предыдущих пакетов .

Извините за шум.


Первый ответ:

Обновлениеваш pip до версии 0.8.3, он имеет исправление в порядке установки .

Теперь, если вы обновляете все работает: -)

Проверьте новости здесь: http://www.pip -installer.org / о / 0.8.3 / news.html

...