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

Запуск Scipy на Heroku

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

Итак, я скомпилировал 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 в мой require.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.

Кажется, что pip не знает переменную среды BLAS, поэтому я проверяю среду с помощью запуска python с помощью heroku:

(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

4b9b3361

Ответ 1

Мне удалось заставить эту работу работать над кедровым стекем, создав numpy и scipy offline как bdists, а затем модифицировав buildpack для python heroku, чтобы разархивировать их непосредственно в области dyno vendor/venv. Вы также можете использовать buildpack для установки переменных среды, которые сохраняются.

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

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

Изменения находятся в bin/compile, где я отправляю два новых шага, шаг 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-install требуется наличие fortran-компилятора + связанного с ним среды, и это делало мои пули слишком большими.

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

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

Ответ 2

Если кто-то еще подходит к этому, как я...

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

  • Я выложил репозиторий npsicpy-binaries из @coshx и изменил все файлы tar, чтобы у них не было venv как корневая папка внутри (моя вилка здесь)

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

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

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

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

ПРИМЕЧАНИЕ. Я еще не разработал, как сделать свои собственные двоичные файлы, поэтому три библиотеки (scipy, numpy и scikit-learn) не являются последними версиями, поэтому убедитесь, что когда вы ее устанавливаете (если кто-нибудь может постройте их, я с радостью принимаю запрос на их вытягивание):

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

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

Ответ 3

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

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

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

Если вы уже настроили приложение Python на Heroku, вы можете добавить сборку conda 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.

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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