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

Требования Matplotlib с установкой pip в virtualenv

У меня есть файл requirements.txt, например:

numpy
matplotlib

Когда я пытаюсь использовать pip install -r requirements.txt внутри нового virtualvenv, я получаю следующее:

REQUIRED DEPENDENCIES

             numpy: no

                    * You must install numpy 1.1 or later to build

                    * matplotlib.

Если я устанавливаю numpy first и matplotlib после, он работает. Однако я бы хотел использовать pip install -r requirements.txt. Возможно ли это?

4b9b3361

Ответ 1

Matplotlib и pip, похоже, не играют вместе очень хорошо. Поэтому я не думаю, что это возможно в этом случае.

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

Проблема заключается в том, что matplotlib проверяет, установлена ​​ли numpy в ее setup.py (сама проверка определена в setupext.py). Таким образом, в момент выполнения проверки numpy не устанавливается, и matplotlib setup.py выходит с полученным сообщением об ошибке (это может быть не ошибка, так как может потребоваться создание numpy).

Это было однажды рассмотрено в pip issue # 24 и issue # 25. Проблемы закрыты, но дают более подробную информацию.

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

Обновление 12/2012

Существует новая открытая проблема с пиками, которая касается этой проблемы.

Обновление 04/2013

Проблема закрыта как WONTFIX

Ответ 2

Это известная проблема библиотеки, и в настоящее время она рассматривается как предложение улучшения Matplotlib: https://github.com/matplotlib/matplotlib/wiki/MEP11. Пока это не исправлено, единственным решением, которое я могу себе представить, является переупаковка библиотеки, чтобы удалить проверку numpy.

Ответ 3

Да. "requirements.txt" - это всего лишь плоский файл, из которого pip может использовать для установки пакетов. В этом файле вы можете изменить версию зависимостей. Например, похоже, что вам нужно как минимум 1.1, поэтому попробуйте изменить строку с помощью "numpy":

NumPy == 1.1

Или вы можете использовать >= вот так:

NumPy >= 1.1

Это может быть то, что удерживает вас. Но, AFAIK, matplotlib уже должен иметь зависимость от numpy. Похоже, что это может быть исправлено.

См. также Как установить пакет с минимальным и максимальным диапазоном версии?

и

В файле настроек setup.py или pip, как контролировать порядок установки зависимостей пакетов?

Ответ 4

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

В простом случае (т.е. просто numpy и matplotlib требует упорядочения), вы можете просто отменить файл реквизитов: pip freeze | sort -r

Ответ 5

Я только что привык к вызову script для повторной настройки моего virtualenv; он включает в себя два файла требований: один с только numpy, а второй со всем остальным.

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

Ответ 6

Я запустил его в virtualenv внутри ноутбука iPython!

У меня

ipython==2.2.0
numpy==1.8.2
matplotlib==1.4.2

Он работает в ноутбуке iPython с

%matplotlib inline
from pylab import *
plot([1,2,3])

Однако он не работает в консоли iPython, но я очень счастлив сделать свое графическое оформление в ноутбуке!

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