Требования 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
. Возможно ли это?
Ответы
Ответ 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, но другие вещи только в глобальном пространстве имен, но я забыл, как я это сделал. Я просто продолжал устанавливать и деинсталлировать вещи.