2012-03-22 4 views
26

У меня есть Numpy и Matplotlib, работающие на Heroku, и я также пытаюсь установить Scipy. Однако Scipy требует BLAS [1] для установки, который не представлен на платформе Heroku. После обращения к поддержке Heroku они предложили мне создать BLAS как статическую библиотеку для развертывания и настроить необходимые переменные среды.Запуск Scipy на Heroku

Итак, я составил libblas.a на 64-битной Linux поле, и установите следующие переменные, как описано в [2]:

$ heroku config 
BLAS    => .heroku/vendor/lib/libfblas.a 
LD_LIBRARY_PATH => .heroku/vendor/lib 
LIBRARY_PATH  => .heroku/vendor/lib 
PATH    => bin:/usr/local/bin:/usr/bin:/bin 
PYTHONUNBUFFERED => true 

После добавления SciPy == 0.10.1 в моей requirements.txt, толчок все еще терпит неудачу.

 File "scipy/integrate/setup.py", line 10, in configuration 

     blas_opt = get_info('blas_opt',notfound_action=2) 

    File "/tmp/build_h5l5y31i49e8/lib/python2.7/site-packages/numpy/distutils/system_info.py", line 311, in get_info 

     return cl().get_info(notfound_action) 

    File "/tmp/build_h5l5y31i49e8/lib/python2.7/site-packages/numpy/distutils/system_info.py", line 462, in get_info 

     raise self.notfounderror(self.notfounderror.__doc__) 

    numpy.distutils.system_info.BlasNotFoundError: 

     Blas (http://www.netlib.org/blas/) libraries not found. 

     Directories to search for the libraries can be specified in the 

     numpy/distutils/site.cfg file (section [blas]) or by setting 

     the BLAS environment variable. 

Казалось, что пип не знает о переменной окружения BLAS, поэтому проверьте среду с помощью Heroku запустить Python:

(venv)bash-3.2$ heroku run python 
Running python attached to terminal... import up, run.1 
Python 2.7.2 (default, Oct 31 2011, 16:22:04) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> os.system('bash') 
~ $ echo $BLAS 
.heroku/vendor/lib/libfblas.a 
~ $ ls .heroku/vendor/lib/libfblas.a 
.heroku/vendor/lib/libfblas.a 
~ $ 

И, кажется, хорошо. Теперь я понятия не имею, как это решить.

[1] http://www.netlib.org/blas/ [2] http://www.scipy.org/Installing_SciPy/Linux

ответ

3

Слизняк компилятор не знает о ваших переменных окружения, поэтому он не во время толчка, а не когда-то работает.

Единственный реальный вариант, который у вас есть, это посмотреть на аддон user_env_compile, который в настоящее время находится в лаборатории бета-тестирования.

http://devcenter.heroku.com/articles/labs-user-env-compile

15

мне удалось получить эту работу в стек кедрового построив NumPy и SciPy в автономном режиме, как bdists и затем изменяя Heroku питона buildpack распаковать их на поставщика/venv областях дино непосредственно. Вы также можете использовать buildpack для установки переменных среды, которые сохраняются.

Heroku еще официально не опубликовал сборные пакеты - найдите «heroku buildpacks» для получения более третьих сторон/героев и информации.

Моей вилка питоной сборки пакета здесь: https://[email protected]/wyn/heroku-buildpack-python.git

Изменения в мусорном/компиляции, где я источник двух новых шагов, а SciPy/Numpy шаг и шаг OpenOpt. Сценарии для двух шагов находятся в bin/steps/npscipy и bin/steps/openopt. Я также добавил некоторые переменные в bin/release. Обратите внимание, что я предполагаю установку через файл setup.py, а не подход requirements.txt (c.f. https://devcenter.heroku.com/articles/python-pip#traditional_distributions).

Я также загружаю двоичные файлы blas/lapack/atlas/gfortran, которые использовались для создания numpy/scipy на dyno, поскольку есть c расширения, которые необходимо связать с ними. Причина построения всего автономного и загружаемого заключается в том, что для установки nump/scipy в pip-приложениях требуется наличие fortran-компилятора + связанного с ним среды, и это делало мои пули слишком большими.

Кажется, что размер пули теперь составляет 35 мб, и масштабирование кажется слишком быстрым. Все, кроме одного из тестов numpy, проходят, и все тесты Scipy проходят.

Это все еще работает для меня, но я думал, что поделюсь.

+1

извините забыл сказать, если вы хотите использовать buildpack, как это сделать: $ heroku create appname --stack = cedar [email protected]: wyn/heroku-buildpack-python.git – coshx

+3

Отличная работа! Я парень на Питоне в Хероку. :) –

+0

Спасибо, мне нравится играть с кедровым стеклом и создавать пакеты. Я сейчас смотрю на строитель вулкана, я думаю, было бы хорошо, чтобы эти вещи были построены с этим ... – coshx

8

В случае, если кто-то приходит к этому, как я ...

excellent answer по этому вопросу от @coshx печально больше не работает (по крайней мере, я не мог заставить его работать). То, что я сделал, однако было следующее:

  1. Я раздвоенный npsicpy-binaries хранилищу из @coshx и изменил все файлы дегтя таким образом, что они не имеют venv как корневая папка внутри (моя вилка here)

  2. Я распаковал репозиторий npsp-helloworld от @coshx и сделал для него файл requirements.txt вместо setup.py (моя вилка here - это означает, что вы можете использовать весь подход к подбору).

  3. Я раздвоил heroku-buildpack-python хранилище от Heroku, взял npscipy файл из @coshx и изменил его на работу с этой последней версией сборки пакета (моя вилка here - вы можете видеть, что нет venv установить, например).

После выполнения этих трех вещей у меня есть приложение, работающее отлично. Вам просто нужно, чтобы убедиться, что вы установите buildpack надлежащим образом при создании приложения, и вы хорошо идти:

$ heroku create --stack=cedar --buildpack=https://github.com/kmp1/heroku-buildpack-python.git 

Примечание: Я не работал, как сделать свои собственные исполняемые файлы еще, так что три библиотеки (SciPy, NumPy и scikit учиться) не самые последние версии поэтому убедитесь, что при установке его вам (если кто-то может построить их, я бы с удовольствием принимают запрос тянуть за них):

pip install scipy==0.11.0 
pip install numpy==1.7.0 
pip install scikit-learn==0.13.1 

Кстати - Мне очень жаль, если я не сделал правильные вещи, этикето-мудрый. Я все еще изучаю git и все это с открытым исходным кодом.

1

Для тех, кто хочет использовать Python 3.4 в производстве, я построил numpy 1.8.1, scipy 0.14.0 и scikit-learn 0.15-git (0.14 не работает с другими по какой-либо причине) как двоичные файлы на Ubuntu 10.04 LTS 64-бит, который работает на стек кедра Heroku. Here is the git repo.

My heroku buildpack очень похож на мой kmp. Обратите внимание, что файл bin/steps/npscipy ссылается на мой репозиторий двоичных файлов выше.

8

Другим хорошим вариантом является conda buildpack, который позволяет добавлять любые бесплатные пакеты Linux64, доступные через Anaconda/Miniconda, в приложение Heroku. Некоторые из наиболее популярных пакетов включают numpy, scipy, scikit-learn, statsmodels, pandas и cvxopt. В то время как buildpack делает довольно простым добавление пакетов в приложение, недостатками являются то, что buildback занимает много места и что вы должны ждать, пока Anaconda обновит библиотеки в репозитории.

Если вы начинаете новое приложение Python на Heroku, вы можете добавить Конда buildpack с помощью команды:

$ heroku create YOUR_APP_NAME --buildpack https://github.com/kennethreitz/conda-buildpack.git 

Если вы уже настроили приложение Python на Heroku, вы можете добавить Конда buildpack к существующее приложение с помощью команды:

$ heroku config:add BUILDPACK_URL=https://github.com/kennethreitz/conda-buildpack.git 

Или, если вам нужно указать приложение по имени:

$ heroku config:add BUILDPACK_URL=https://github.com/kennethreitz/conda-buildpack.git --app YOUR_APP_NAME 

Чтобы использовать buildpack, вам нужно будет включить два текстовых файла в каталог приложения, требования.txt и conda-requirements.txt. Как и в стандартном Python buildpack, файл requirements.txt перечисляет пакеты, которые должны быть установлены с помощью pip. Пакеты, которые должны быть установлены с помощью conda, перечислены в файле conda-requirements.txt. Некоторые из наиболее полезных научных пакетов включают numpy, scipy, scikit-learn, statsmodels, pandas и cvxopt. Полный список доступных пакетов conda можно найти по адресу repo.continuum.io.

Например:

$ cat requirements.txt 
gunicorn==0.14.2 
requests==0.11.1 

$ cat conda-requirements.txt 
scipy 
numpy 
cvxopt 

Вот оно! Теперь вы можете добавить пакеты Anaconda в приложение Python на Heroku.

+0

[Ясное объяснение] (https://devcenter.heroku.com/articles/python-c-deps), почему существует сборщик конда. Обратите внимание, что этот buildpack поддерживается Kenneth Reitz, который [«отвечает за технический дизайн предложения Python от Heroku».] (Https://www.linkedin.com/in/kennethreitz) – Jason

1

Я кладу это здесь, если кто-то наткнулся на это, как я. Поскольку я использую python 3.4, thenovices buildpack не подходит для меня.

Я попытался посмотреть на сборку conda buildpack, но для моего приложения это кажется немного лишним, что требует только scipy и numpy. Что, наконец, работает для меня, это this excellent guide, используя подход multi buildpacks. Конечно, скудная установка была немного длинной. Надеюсь это поможет! :)

 Смежные вопросы

  • Нет связанных вопросов^_^