heroku numpy scipy blas

Corriendo Scipy en Heroku



numpy blas (6)

El compilador slug no conoce sus variables de entorno, por lo que falla durante la inserción y no se ejecuta una vez.

La única opción real que tiene es mirar el complemento user_env_compile que se encuentra actualmente en beta de los laboratorios.

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

Tengo Numpy y Matplotlib corriendo en Heroku, y estoy tratando de instalar Scipy también. Sin embargo, Scipy requiere la instalación de BLAS [1], que no se presenta en la plataforma Heroku. Después de contactar al soporte técnico de Heroku, me sugirieron que creara BLAS como una biblioteca estática para implementar y configurara las variables de entorno necesarias.

Entonces, compilé libblas.a en un cuadro Linux de 64 bits y establecí las siguientes variables como se describe en [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

Después de agregar scipy == 0.10.1 en my requirements.txt, la inserción aún falla.

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.

Parece que pip no está al tanto de la variable de entorno BLAS, así que verifico el entorno usando 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 ~ $

Y parece bien. Ahora no tengo idea de cómo resolver esto.

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


En caso de que alguien más llegue a esto como yo lo hice ...

La excelente respuesta a esta pregunta de lamentablemente ya no funciona (al menos no pude hacer que funcionara). Lo que hice, sin embargo, fue el siguiente:

  1. npsicpy-binaries repositorio npsicpy-binaries de @coshx y cambié todos los archivos tar de modo que no tengan venv como la carpeta raíz dentro (mi fork está here )

  2. Bifurqué el repositorio npsp-helloworld de @coshx y lo hice usar un archivo requirements.txt lugar de setup.py (mi fork está here , esto significa que puede usar el enfoque completo de pip).

  3. heroku-buildpack-python el heroku-buildpack-python de Heroku, tomé el archivo npscipy de @coshx y lo cambié para que funcionara con esta última versión del paquete de compilación (mi fork está here ; se puede ver que no hay configuración de venv, para ejemplo).

Después de hacer esas tres cosas, tengo la aplicación npsp-helloworld funcionando perfectamente. Solo debe asegurarse de configurar el buildpack de forma adecuada al crear la aplicación y listo:

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

NOTA: Todavía no he resuelto cómo hacer mis propios binarios, así que las tres bibliotecas (scipy, numpy y scikit-learn) no son las últimas versiones, así que asegúrese de que cuando lo instale lo haga (si alguien puede construirlas, con mucho gusto aceptaría una solicitud de extracción para ellos):

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

Por cierto, lo siento mucho si no he hecho las cosas del modo correcto, en cuanto a etiqueta. Todavía estoy aprendiendo git y todo esto de código abierto.


Estoy poniendo esto aquí en caso de que alguien haya tropezado con esto como yo. Como estoy usando Python 3.4, el buildpack no funciona para mí.

Traté de mirar el buildpack de conda, pero parece un poco exagerado para mi aplicación, que solo requiere un poco de estilo. Lo que finalmente funciona para mí es esta excelente guía , que utiliza un enfoque de múltiples buildpacks. La instalación de scipy fue de hecho un poco larga. ¡Espero que esto ayude! :)


Logré hacer que esto funcionara en la pila de cedros creando numpy y scipy fuera de línea como bdists y luego modificando el buildpack heroku python para descomprimirlos directamente en las áreas de vendedores / vendedores del dyno. También puede usar buildpack para establecer las variables de entorno que persisten.

Heroku aún no ha publicado buildpacks oficialmente: busque ''heroku buildpacks'' para obtener más información sobre thirdparty / heroku e información.

Mi fork del paquete de construcción python está aquí: https://[email protected]/wyn/heroku-buildpack-python.git

Los cambios se encuentran en bin / compile, donde obtengo dos nuevos pasos, un paso scipy / numpy y un paso de apertura. Los scripts para los dos pasos están en bin / steps / npscipy y bin / steps / openopt. También agregué algunas variables a bin / release. Tenga en cuenta que estoy asumiendo la instalación a través de un archivo setup.py en lugar del método requirements.txt (cf https://devcenter.heroku.com/articles/python-pip#traditional_distributions ).

También descargué los binarios blas / lapack / atlas / gfortran que se usaron para crear numpy / scipy en el banco de pruebas, ya que hay extensiones c que necesitan conectarse a ellos. La razón para construir todo fuera de línea y descargar es que la instalación de pip-numpy / scipy requiere que tengas un compilador fortran + entorno de desarrollo asociado y esto hace que mis babosas sean demasiado grandes.

Parece que funciona, el tamaño de la babosa es ahora de 35 mb y la escala también parece rápida. Todas menos una de las pruebas numpy pasan y todas las pruebas scipy pasan.

Esto sigue siendo un trabajo en progreso para mí, pero pensé que lo compartiría.


Otra buena opción es la conda buildpack , que le permite agregar cualquiera de los paquetes gratuitos de Linux64 disponibles a través de Anaconda / Miniconda a una aplicación Heroku. Algunos de los paquetes más populares incluyen numpy, scipy, scikit-learn, modelsmodels, pandas y cvxopt. Si bien el buildpack hace que sea bastante simple agregar paquetes a una aplicación, las desventajas son que la reconstrucción requiere mucho espacio y que debes esperar en Anaconda para actualizar las bibliotecas en el repositorio.

Si está iniciando una nueva aplicación de Python en Heroku, puede agregar el buildpack de conda usando el comando:

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

Si ya ha configurado una aplicación de Python en Heroku, puede agregar el paquete de compilación de conda a la aplicación existente usando el comando:

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

O bien, si necesita especificar la aplicación por nombre:

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

Para usar buildpack, deberá incluir dos archivos de texto en el directorio de la aplicación, requirements.txt y conda-requirements.txt. Al igual que con el paquete de construcción Python estándar, el archivo requirements.txt enumera los paquetes que deben instalarse usando pip. Los paquetes que se deben instalar usando conda se enumeran en el archivo conda-requirements.txt. Algunos de los paquetes científicos más útiles incluyen numpy, scipy, scikit-learn, modelsmodels, pandas y cvxopt. La lista completa de paquetes de conda disponibles se puede encontrar en repo.continuum.io .

Por ejemplo:

$ cat requirements.txt gunicorn==0.14.2 requests==0.11.1 $ cat conda-requirements.txt scipy numpy cvxopt

¡Eso es! Ahora puede agregar paquetes de Anaconda a una aplicación de Python en Heroku.


Para aquellos que desean usar Python 3.4 en producción, he creado numpy 1.8.1, scipy 0.14.0 y scikit-learn 0.15-git (0.14 no funciona con los demás por alguna razón) como binarios en Ubuntu 10.04 LTS de 64 bits, que funciona en la pila de cedros de Heroku. Aquí está el git repo .

Mi buildpack heroku es bastante similar al de . Tenga en cuenta que el archivo bin / steps / npscipy se vincula a mi repositorio de binarios de arriba.