2012-11-08 9 views
9

Piszę prosty IronWorker in Python, aby wykonać trochę pracy z interfejsem API AWS.Jak powiązać zależności Pythona w IronWorker?

Aby to zrobić, chcę użyć boto library, który jest dystrybuowany za pośrednictwem PiPy. Biblioteka boto nie jest domyślnie instalowana w środowisku wykonawczym IronWorker.

Jak mogę połączyć zależność boto z moim kodem IronWorker?

Idealnie Mam nadzieję, że mogę używać coś jak gem dependancy bundling available for Ruby IronWorkers - tj myRuby.worker określić

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

W Python Loggly sample, widzę, że biblioteka odkurzacz jest używany:

#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 

jednak Nie widzę, gdzie/jak określić, która wersja biblioteki hoover ma być lub skąd ją pobrać.

Jaki jest oficjalny/poprawny sposób korzystania z bibliotek zewnętrznych w Python IronWorkers?

Odpowiedz

6

[edytuj] Pracowaliśmy nad naszym zestawem narzędzi, ponieważ ta odpowiedź została napisana i zaakceptowana. Polecenie answer from my colleague below jest polecanym kursem do przodu. [/ Edit]

Napisałem bibliotekę klienta Python dla IronWorker. Jestem również zatrudniony przez Iron.io.

Jeśli korzystasz z biblioteki klienta Python, najprostszym (i zalecanym) sposobem jest skopiowanie folderu zainstalowanego w bibliotece i dołączenie go podczas przesyłania pakietu. Tak właśnie robi przykład Pythona Loggly. Jak już powiedziałeś, nie określa to wersji ani skąd pobrać biblioteki, ponieważ jej to nie obchodzi. Po prostu instaluje się w systemie i używa go. Cokolwiek otrzymasz po wpisaniu "import boto" na lokalnym komputerze, to co zostanie przesłane.

Inną opcją jest użycie naszego CLI do przesłania swojego pracownika z numerem .worker file.

Aby to zrobić, oto co trzeba by zrobić:

Utwórz plik botoworker.worker:

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

To druga linia jest polecenie pip, które będą prowadzone w celu zainstalowania zależność . Możesz go zmodyfikować tak, jak każde polecenie pip uruchomione z wiersza poleceń. Wykona to polecenie na module roboczym podczas fazy "kompilacji", więc jest wykonywane tylko raz, zamiast za każdym razem, gdy uruchamiasz zadanie.

Trzeci wiersz należy zmienić na plik Pythona, który chcesz uruchomić - jest to plik roboczy Python. Oto ten, który służy do testowania to:

import boto 

Jeśli zapiszesz to jako botoworker.py, powyższe powinny działać bez żadnych modyfikacji. :)

Czwarta linia to skrypt powłoki, który faktycznie uruchomi twojego pracownika. Podaję ten, którego użyliśmy poniżej. Po prostu zapisz go jako botoworker.sh, a nie będziesz musiał się martwić o modyfikację pliku .worker powyżej.

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

Zauważysz, że odnosi się do pliku Pythona - jeśli nie nazwać Pythona plików botoworker.py, pamiętaj, aby go zmienić i tu. Wszystko to robi, że twoja PYTHONPATH ma zawierać zainstalowaną bibliotekę, a następnie uruchamia twój plik Pythona.

Aby to przesłać, tylko upewnij się, że zainstalowany CLI (gem install iron_worker_ng, upewniając się, że wersja 1.9.3 jest Ruby lub wyższa), a następnie uruchomić „iron_worker wysyłania botoworker” w swojej skorupie, z tego samego katalogu swoje plik botoworker.worker jest w.

Mam nadzieję, że to pomoże!

+0

+1 To powinno być w dokumentacji pracownika żelaza! –

+0

@KevinSimper Pracujemy nad tym. :) Nasz zespół szybko iteruje, co utrudnia naszemu zespołowi dokumentacji (co jest moim obowiązkiem) nadążać. Pracujemy nad kilkoma rzeczami, które, mam nadzieję, sprawią, że będzie o wiele lepiej. – Paddy

+1

Kevin - nie ma potrzeby. wkrótce będziemy mieli obsługę poleceń 'pip' w .worker. – iced

13

Nowsza wersja iron_worker ma macierzystą obsługę polecenia pip. Tak, trzeba:

runtime "python" 
exec "something.py" 

pip "boto" 
pip "someotherpip" 

full_remote_build true 
+2

Jeśli chcesz przypiąć do konkretnej wersji, wygląda na to, że musisz zrobić coś takiego: 'pip" boto "," == 2.9.2 "' –

Powiązane problemy