Бегущий Сципи на Героку - PullRequest
27 голосов
/ 22 марта 2012

Я запустил 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, поэтому я проверяю окружение, используя heroku run 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

Ответы [ 6 ]

15 голосов
/ 17 мая 2012

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

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

Мой пакет сборки Python находится здесь: https://wyn@github.com/wyn/heroku-buildpack-python.git

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

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

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

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

9 голосов
/ 23 сентября 2013

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

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

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

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

  3. Я раздвоил 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 и все это с открытым исходным кодом.

8 голосов
/ 27 января 2015

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

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

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

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

$ 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-пакет, вам потребуется включить два текстовых файла в каталог приложения: needs.txt и conda-needs.txt. Как и в стандартном сборочном пакете Python, в файле require.txt перечислены пакеты, которые должны быть установлены с помощью pip. Пакеты, которые должны быть установлены с использованием conda, перечислены в файле conda-needs.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.

3 голосов
/ 22 марта 2012

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

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

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

1 голос
/ 12 октября 2015

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

Я попытался посмотреть на сборку conda buildpack, но для моего приложения это кажется излишним излишним, что требует только scipy и numpy. В конечном итоге у меня работает это превосходное руководство , использующее подход с несколькими сборками. Тем не менее, установка Scipy была довольно долгой. Надеюсь это поможет! :)

1 голос
/ 13 мая 2014

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

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

...