2012-11-08 11 views
9

Sto scrivendo un semplice IronWorker in Python per lavorare con l'API di AWS.Come aggregare dipendenze Python in IronWorker?

Per fare ciò, desidero utilizzare lo boto library che è distribuito tramite PiPy. La libreria boto non è installata di default nell'ambiente di runtime IronWorker.

Come è possibile raggruppare la dipendenza da boto library con il mio codice IronWorker?

Idealmente Sto sperando che posso usare qualcosa come il gem dependancy bundling available for Ruby IronWorkers - cioè in myRuby.worker specificare

gemfile '../Gemfile', 'common', 'worker' # merges gems from common and worker groups 

Nel Python Loggly sample, vedo che la libreria Hoover viene utilizzato:

#here we have to include hoover library with worker. 
hoover_dir = os.path.dirname(hoover.__file__) 
shutil.copytree(hoover_dir, worker_dir + '/loggly') #copy it to worker directory 

Tuttavia, Non riesco a vedere dove/come specifichi quale versione della libreria hoover vuoi o da dove scaricare.

Qual è il modo ufficiale/corretto di utilizzare le librerie di terze parti in Python IronWorkers?

risposta

6

[modifica] Abbiamo lavorato al nostro set di strumenti un po 'da quando questa risposta è stata scritta e accettata. Il corso answer from my colleague below è il corso consigliato in avanti. [/ Edit]

Ho scritto la libreria client Python per IronWorker. Sono anche impiegato da Iron.io.

Se si utilizza la libreria client Python, il modo più semplice (e consigliato) per farlo è copiare semplicemente la cartella installata della libreria e includerla quando si carica il pacchetto. Questo è ciò che sta facendo l'esempio di Python Loggly. Come hai detto, questo non specifica una versione o da dove scaricare la libreria, perché non gli interessa. Prende solo quello installato sul tuo sistema e lo usa. Qualunque cosa tu ottenga quando inserisci "import boto" sul tuo computer locale è ciò che verrebbe caricato.

L'altra opzione utilizza il nostro CLI per caricare il lavoratore, con un .worker file.

Per fare questo, ecco cosa avresti bisogno di fare:

Creare un file botoworker.worker:

runtime "binary" 
build 'pip install --install-option="--prefix=`pwd`/pips" boto' 
file 'botoworker.py' 
exec "botoworker.sh" 

Quella seconda linea è il comando pip che verrà eseguito da installare la dipendenza . Puoi modificarlo come faresti con qualsiasi comando pip dalla riga di comando. Eseguirà quel comando sul worker durante la fase di "build", quindi verrà eseguito una volta sola invece di ogni volta che si esegue un'attività.

La terza riga deve essere modificata nel file Python che si desidera eseguire: è il file di lavoro Python. Ecco quello che abbiamo usato per testare questo:

import boto 

Se si salva che come botoworker.py, quanto sopra dovrebbe funzionare senza alcuna modifica. :)

La quarta riga è uno script di shell che eseguirà effettivamente il tuo worker. Ho incluso quello che abbiamo usato qui sotto. Basta salvarlo come botoworker.sh, e non dovrai preoccuparti di modificare il file .worker qui sopra.

PYTHONPATH="$HOME/pips/lib/python2.7/site-packages:$PYTHONPATH" python botoworker.py "[email protected]" 

Noterete si riferisce al file Python - se non chiami il file botoworker.py Python, ricordarsi di cambiare qui, anche. Tutto ciò è impostato su PYTHONPATH per includere la libreria installata, quindi esegue il file Python.

Per caricare questo, assicurati di aver installato la CLI (gem installa iron_worker_ng, assicurati che la tua versione di Ruby sia 1.9.3 o successiva) e poi esegui "iron_worker upload botoworker" nella tua shell, dalla stessa directory tua file botoworker.worker è in.

Spero che questo aiuti!

+0

+1 Che dovrebbe essere nella documentazione di Iron Work! –

+0

@KevinSimper Ci stiamo lavorando. :) Il nostro team itera velocemente, il che rende difficile per il nostro team di documentazione (che è una specie di mia responsabilità) tenere il passo. Stiamo lavorando su alcune cose che dovrebbero, si spera, rendere questo molto meglio, però. – Paddy

+1

kevin - nessuna necessità. molto presto avremo il supporto per il comando 'pip' in .worker. – iced

13

La versione di iron_worker più recente ha il supporto nativo del comando pip. Quindi, è necessario:

runtime "python" 
exec "something.py" 

pip "boto" 
pip "someotherpip" 

full_remote_build true 
+2

Se si desidera eseguire il pin su una versione specifica, sembra che sia necessario fare qualcosa del tipo: 'pip" boto "," == 2.9.2 "' –

Problemi correlati