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

Как указать порядок установки для питона python?

Я работаю с тканью (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

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

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

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

4b9b3361

Ответ 1

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

#!/bin/bash
for line in $(cat requirements.txt)
do
  pip install $line -E /path/to/virtualenv
done

Ответ 2

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

cat requirements.txt | xargs pip install

Ответ 3

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

cat requirements.txt | xargs -n 1 -L 1 pip install

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

Ответ 4

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

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

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

Построение статистических моделей не будет выполнено со следующим утверждением

ImportError: statsmodels requires numpy

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

Ответ 5

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

cat requirements.txt | xargs -n 1 pip install

Ответ 6

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

grep -v "^#" requirements.txt | xargs pip install

Ответ 7

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 - Installation Order раздел документации по протоколу:

Начиная с версии v.1.1.0, pp устанавливает зависимости перед их иждивенцами, т.е. в "топологическом порядке". Это единственное обязательство в настоящее время делает связанные с порядком.

И позже:

До v6.1.0 pip не принял обязательств относительно порядка установки.

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

Ответ 8

Я закончил работу с 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.

Ответ 9

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

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

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

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

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


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

Обновите свой пипс до версии 0.8.3, у него есть bugfix для порядка установки.

Теперь, если вы обновите все, выполните следующие действия: -)

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