2012-07-24 11 views
5

Ho installato con successo numpy e scipy utilizzando il metodo descritto nella risposta this. Poi ho voluto aggiungere scikit-learn così in un primo momento ho provato ad aggiungere scikit-learn==0.11 al requirements.txt e quando spinto a Heroku ho ricevuto un messaggio di errore:Come installare scikit-learn su heroku cedar?

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

Così ho aggiunto al LD_LIBRARY_PATH il percorso in cui ho liblapack.so.3gf ma poi ho ottenuto questo:

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

credo che Heroku non hai compilatore Fortran, ma forse mi sbaglio. Come posso risolvere questo?

risposta

6

Sulla base di questi suggerimenti, ho appena terminato un'installazione di scikit-learn su heroku. Sono stato molto felice di vedere che non v'è alcuna necessità di ottenere binari su misura, ma che l'impostazione di alcuni ambienti ha fatto il trucco :)

È possibile trovare il passo personalizzato aggiuntivo nel mio fork del buildpack di Wyn: https://github.com/ToonTimbermont/heroku-buildpack-python

la chiave è stato quello di impostare i valori corretti per LD_LIBRARY_PATH: export LD_LIBRARY_PATH=$(pwd)/vendor/lib:$(pwd)/vendor/lib/atlas- base:$(pwd)/vendor/lib/atlas-base/atlas

ho anche aggiunto questi percorsi alla configurazione 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

buon lavoro! questo è in realtà in funzione ... – zenpoy

+1

Ho portato e migliorato le tue modifiche alle versioni correnti di Heroku Buildpack. Puoi trovarli qui https://github.com/dbrgn/heroku-buildpack-python-sklearn e leggerli qui http://blog.dbrgn.ch/2013/6/18/heroku-buildpack-numpy-scipy -scikit-imparare /. –

+0

ha funzionato per me quasi 2 anni dopo! grazie! – hobs

1

Potrebbe essere possibile raggruppare tutte le librerie necessarie nell'applicazione stessa, ma la soluzione più elegante è quella di clonare lo Heroku Python Buildpack su git e modificarlo per includere le librerie. Quindi puoi indicare alla tua app di utilizzare il buildpack modificato con il flag --buildpack sul client della riga di comando.

Modifica: non ho fatto clic sull'altra risposta in origine, ma sembra che tu stia già utilizzando un buildpack personalizzato. Il buildpack che stai utilizzando ha una varietà di custom steps che scarica custom binaries. I binari sono compilati sotto Debian a 64 bit.

Dovresti essere in grado di analizzare uno degli altri binari personalizzati utilizzati da buildpack per scoprire lo --prefix con il quale puoi ./configure e creare le librerie aggiuntive che desideri. Non è esattamente facile o conveniente, ma dovrebbe funzionare come numpy e scipy ha funzionato.

+0

Ho già clonato il pacchetto di build. Ecco come ho installato sc? Ipy e irregolare. Ma come posso ottenere le librerie compilate per scikit? Devo compilarli? Su quale tipo di macchina? – zenpoy

+0

Oh, capisco! Errore mio. Fammi modificare la risposta con maggiori dettagli. –

3

Un'altra buona opzione è lo conda buildpack, che consente di aggiungere uno qualsiasi dei pacchetti Linux64 gratuiti disponibili tramite Anaconda/Miniconda a un'app di Heroku. Alcuni dei pacchetti più popolari includono numpy, scipy, scikit-learn, statsmodels e panda. Mentre buildpack rende abbastanza semplice aggiungere pacchetti a un'app, gli svantaggi sono che il buildback occupa molto spazio e che bisogna attendere su Anaconda per aggiornare le librerie nel repository.

Se si inizia una nuova applicazione Python su Heroku, è possibile aggiungere il buildpack Conda utilizzando il comando:

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

Se avete già installato un app Python su Heroku, è possibile aggiungere il buildpack Conda a l'applicazione esistente utilizzando il comando:

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

O, se è necessario specificare l'applicazione per nome:

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

Per utilizzare il buildpack, è necessario includere due file di testo nella directory dell'app, requisiti.txt e conda-requisiti.txt. Proprio come con il buildpack Python standard, il file requirements.txt elenca i pacchetti che dovrebbero essere installati usando pip. I pacchetti che devono essere installati usando conda sono elencati nel file conda-requirements.txt. Alcuni dei pacchetti scientifici più utili includono numpy, scipy, scikit-learn, statsmodels, panda e cvxopt. L'elenco completo dei pacchetti di conda disponibili è disponibile al numero repo.continuum.io.

Ad esempio:

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

$ cat conda-requirements.txt 
scipy 
numpy 
cvxopt 

Questo è tutto! Ora puoi aggiungere i pacchetti Anaconda a un'app Python su Heroku.

+0

Sfortunatamente funziona, ma il buildpack di base è troppo grande per fare davvero molto con ... Non potrei neanche avere i panda installati poiché i pacchetti di conda sono cose come Qt di default (50 mega!) – Chrismit

-1

Utilizzare il compilation conda e aggiungere "nomkl" al file conda-requirements.txt per ridurre lo slugsize.

Problemi correlati