2012-07-24 5 views
5

He instalado correctamente numpy y scipy usando el método descrito en this answer. Entonces quería añadir scikit-learn así que al principio intentado añadir a la scikit-learn==0.11 requirements.txt y cuando se empuja a heroku Tengo un mensaje de error:¿Cómo instalar scikit-learn en heroku cedro?

ImportError: liblapack.so.3gf: cannot open shared object file: No such file or directory 

Así que hemos añadido a LD_LIBRARY_PATH la ruta en la que tengo liblapack.so.3gf pero luego me dieron esto:

ImportError: libgfortran.so.3: cannot open shared object file: No such file or directory 

creo que heroku no tiene compilador Fortran, pero tal vez mal. ¿Cómo puedo resolver esto?

Respuesta

6

Basándome en estos consejos, acabo de terminar una instalación de scikit-learn en heroku. Yo estaba muy feliz de ver que no hay necesidad de conseguir binarios personalizados, sino que la fijación de algunos entornos hizo el truco :)

se puede encontrar el paso a medida adicional en el tenedor de la buildpack de Wyn: https://github.com/ToonTimbermont/heroku-buildpack-python

la clave era establecer los valores adecuados para LD_LIBRARY_PATH: export LD_LIBRARY_PATH=$(pwd)/vendor/lib:$(pwd)/vendor/lib/atlas- base:$(pwd)/vendor/lib/atlas-base/atlas

también he añadido estos caminos para la configuración heroku: heroku config:add LD_LIBRARY_PATH=/app/.heroku/vendor/lib/atlas-base/atlas:/app/.heroku/vendor/lib/atlas-base:/app/.heroku/vendor/lib/

+0

¡buen trabajo! esto está funcionando realmente ... – zenpoy

+1

Porté y mejoré sus cambios a las versiones actuales del Heroku Buildpack. Puede encontrarlos aquí https://github.com/dbrgn/heroku-buildpack-python-sklearn y leer sobre ellos aquí http://blog.dbrgn.ch/2013/6/18/heroku-buildpack-numpy-scipy -scikit-learn /. –

+0

funcionó para mí casi 2 años después! ¡gracias! – hobs

1

Es posible que pueda empaquetar todas las bibliotecas que necesite en la aplicación, pero la solución más elegante es clonar el Heroku Python Buildpack en git y modificarlo para incluir las bibliotecas. Luego puede indicarle a su aplicación que use su buildpack modificado con el indicador --buildpack en el cliente de línea de comandos.

Editar: No hice clic en la otra respuesta originalmente, pero parece que ya está usando un buildpack personalizado. El buildpack que está utilizando tiene una variedad de custom steps que descarga custom binaries. Los binarios se compilan en Debian de 64 bits.

Debería poder diseccionar uno de los otros binarios personalizados que está usando buildpack para encontrar el --prefix con el que puede ./configure y crear las bibliotecas adicionales que desee. No es exactamente fácil ni conveniente, pero debería funcionar igual que numpy y scipy funcionó.

+0

Ya he clonado el paquete de compilación. Así es como instalé sc? Ipy y lleno de baches. ¿Pero cómo consigo las bibliotecas compiladas para scikit? ¿Tengo que compilarlos? ¿En qué tipo de máquina? – zenpoy

+0

¡Oh, ya veo! Mi error. Déjame editar la respuesta con más detalles. –

3

Otra buena opción es 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 y pandas. 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 va a iniciar una nueva aplicación Python en Heroku, puede agregar el buildpack Conda usando el comando:

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

Si ya has configurado una aplicación Python en Heroku, se puede añadir el buildpack Conda a la aplicación existente utilizando el comando:

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

O, si es necesario especificar la aplicación por su nombre:

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

Para usar buildpack, necesitará 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 paquetes 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 todo! Ahora puede agregar paquetes de Anaconda a una aplicación de Python en Heroku.

+0

Lamentablemente funciona, pero el buildpack base es demasiado grande para realmente hacer mucho con ... Ni siquiera pude instalar pandas ya que conda paquetes cosas como Qt por defecto (50 megas!) – Chrismit

-1

Utilice el buildpack conda y agregue 'nomkl' al archivo conda-requirements.txt para bajar el slugsize.

Cuestiones relacionadas