Как установить matplotlib на Elastic Beanstalk

Поскольку matplotlib требует, чтобы numpy уже был установлен, я столкнулся с проблемой.

Чтобы установить другие пакеты Python в моей среде Elastic Beanstalk, я использую файл pip requirements.txt. Поскольку конфигурация установки автоматически устанавливает пакеты в алфавитном порядке, сначала всегда устанавливается matplotlib, что вызывает ошибку.

Кто-нибудь сталкивался с этой проблемой и знает способ ее успешного решения?


person TeePaps    schedule 30.03.2013    source источник


Ответы (1)


Я бился об стену с этим в течение нескольких дней, но кажется, что если вы хотите установить matplotlib/scipy/scikit-learn с помощью файла requirements.txt, вам нужно делать что-то по одному модулю за раз.

Что мне удалось понять, так это то, что в Elastic Beanstalk пакеты не устанавливаются в каталог site-packages виртуальной среды до тех пор, пока он не пройдет через весь файл requirements.txt.

Так, например, если вы попытаетесь установить numpy и scipy одновременно, как я это делал, это не удастся, потому что scipy не может найти определенные модули numpy (в частности, numpy.distutils.core). Numpy сидит в /opt/python/run/venv/build и ждет выхода, но pip ищет в /opt/python/run/venv/lib/python2.6/site-packages и не находит numpy.

Вам нужно сделать один коммит, указав в файле requirements.txt только numpy, и отправить его в Elastic Beanstalk. Если это удастся, модуль numpy окажется в нужном месте, и тогда вы сможете сделать вторую фиксацию с требованиями, обновленными до scipy или matplotlib в вашем случае.

Будьте осторожны с вашим файлом конфигурации в .ebextensions, вам нужно иметь список всех зависимостей. В частности, в верхней части .ebextensions/myapp.config у вас должно быть

packages:
  yum:
    gcc-c++: []
    gcc-gfortran: []
    python-devel: []
    atlas-sse3-devel: []
    lapack-devel: []
    libpng-devel: []
    freetype-devel: []
    zlib-devel: []

atlas-sse3-devel и lapack-devel нужны, если вам нужен scipy, а libpng-devel, freetype-devel и zlib-devel нужны для matplotlib.

Другой альтернативой является подключение SSH к экземпляру ec2, связанному с вашим приложением в Elastic Beanstalk, запуск виртуальной среды (source /opt/python/run/venv/bin/activate) и установка пакетов самостоятельно.

person nsecord    schedule 08.04.2013
comment
Благодаря тонну! Это убивало меня. Ваш ответ заставил его работать. - person TeePaps; 11.04.2013
comment
Без проблем. Если вы еще этого не сделали, я бы посоветовал создать собственный AMI из вашего рабочего экземпляра, чтобы вы могли повторно использовать установку, если вы закроете ее или развернете другую ветку. - person nsecord; 11.04.2013
comment
Наконец-то я вернулся к работе над этим. Ваше предложение состояло в том, чтобы использовать собственный AMI. Вместо этого я считаю, что лучше было бы написать скрипт для реализации этого в моем файле conf. Есть мысли по этому поводу? - person TeePaps; 10.05.2013
comment
Создание сценария было бы неплохо, но это немного сложно. Если вы посмотрите на документацию для пользовательской среды казалось бы логичным поместить ваш скрипт под заголовком «Команды», но они запускаются до настройки приложения и веб-сервера, поэтому я не думаю, что у вас есть доступ к виртуальной среде. Единственной другой альтернативой является Container_commands, но я думаю, что эти команды выполняются после того, как читаются требования.txt, поэтому ваш скрипт должен установить numpy/matplotlib после всех других модулей. - person nsecord; 12.05.2013
comment
Я пытаюсь сказать, что вам нужно вытащить все зависимости из вашего файла requirements.txt и запустить их отдельно в вашем скрипте, чтобы убедиться, что все сделано в правильном порядке. - person nsecord; 12.05.2013
comment
Так что прямо сейчас я придерживаюсь вашего оригинального решения. Мне не повезло написать сценарий, который выполняется должным образом. Если вам когда-нибудь повезет с этим, дайте мне знать - person TeePaps; 20.05.2013
comment
Я придумал решение для того, чтобы получить scipy на эластичный beanstalk и избежать всего привередливого процесса, позволяющего beanstalk устанавливать все. Это включает в себя настройку virtualenv на beanstalk EC2, затем его архивирование и повторное развертывание через раздел container_commands при следующем развертывании. Так что это что-то среднее между созданием пользовательского AMI и выполнением всего с помощью сценариев пользовательской среды. Легче манипулировать и развертывать tar-архив virtualenv, чем заниматься запеканием и повторным запеканием AMI. - person Nate; 13.02.2014
comment
@Nate: Я не могу заставить это работать. Я пробую самый простой из предложенных здесь подходов (вставьте SSH), но даже это не работает для меня. - person orome; 23.01.2015
comment
@nsecord, я получаю yum does not have python-devel available for installation? - person greenafrican; 09.04.2015
comment
@greenafrican, извините, это было давно, и без какой-либо информации о том, какую ОС вы используете, трудно сказать. Я считаю, что в CentOS и Redhat пакет python-devel, в Ubuntu это python-dev. Выполните поиск пакетов yum с используемой ОС. - person nsecord; 01.06.2015