2012-11-08 24 views
9

AWS API ile çalışmak için basit bir IronWorker in Python yazıyorum. yapmak içinIronWorker'da Python bağımlılıkları nasıl dağıtılır?

yüzden çekirdekli aracılığıyla dağıtılır boto library kullanmak istiyorum. Boto kütüphanesi, IronWorker çalışma ortamı ortamında varsayılan olarak yüklenmez.

boto kitaplık dependancy'imi IronWorker kodumla nasıl paketleyebilirim?

İdeal ben gem dependancy bundling available for Ruby IronWorkers gibi bir şey kullanabilirsiniz umuyorum - Ben Hoover kütüphane kullanıldığını görmek Python Loggly sample yılında

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

belirtmek myRuby.worker örneğin değişikliklere

Ancak
#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 

, Hangi hoover kitaplık sürümünü istediğinizi veya nasıl yükleyeceğinizi nereden/nasıl belirleyeceğinizi göremiyorum.

nedir resmi/Python Ironworkers içinde 3. parti kütüphaneleri kullanmak doğru yoldur?

cevap

6

[değiştir] Bu cevabın yazılmasından ve kabul edilmesinden bu yana araç setimizde biraz çalıştık. answer from my colleague below ilerlemeye tavsiye sahasıdır. [/ Değiştir]

Ben ironworker için Python istemci kütüphanesi yazdı. Ben de Iron.io tarafından istihdam ediyorum.

Python istemci kitaplığı kullanıyorsanız, bunu yapmak için en kolay (ve önerilen) yolu sadece kütüphanenin yüklü klasörün üzerine kopyalayabilir ve paket yüklerken dahil etmektir. Python Loggly örneğinin yukarıda yaptığı şey budur. Dediğiniz gibi, bu bir sürüm belirtmiyor ya da kütüphaneyi nereden indiriyor, çünkü umursamıyor. Sadece sisteminizde yüklü olanı alır ve kullanır. Yerel makinenize "import boto" yazdığınızda ne alırsanız alın, ne yüklenir.

Diğer seçenek bizim CLI bir .worker file ile sizin işçi yüklemek için kullanıyor. İkinci satır bağımlılığı kurmaya çalışacaktır pip komut

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

O:

bir botoworker.worker dosyası oluşturun:

Bunu yapmak için, burada yapmanız gereken yapardım . Komut satırından çalıştırdığınız herhangi bir pip komutu gibi değiştirebilirsiniz. Bu "yapı" aşamasında çalışanın üzerinde bu komutu yürütecek, bu yüzden bir görev çalıştırdığınız her zaman yerine sadece bir kez yürütülür.

Üçüncü satır

çalıştırmak istediğiniz Python dosyasına değiştirilmelidir - bu sizin Python işçi dosya. İşte biz bu sınamak için kullanılan biri:
import boto 

Eğer botoworker.py olarak, yukarıda herhangi bir değişiklik yapmadan çalışması gerektiğini kaydederseniz

. :)

Dördüncü satır, çalışanınızı gerçekten çalıştıracak bir kabuk betiğidir. Aşağıda kullandığımız şeyi ekledim. Sadece botoworker.sh olarak kaydedin ve yukarıdaki .worker dosyasını değiştirme konusunda endişelenmenize gerek kalmayacaktır.Eğer Python dosya botoworker.py isim yoksa, burada da değiştirmek unutmayın -

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

Değişikliklerin bir Python dosyasına atıfta göreceksiniz. Tüm bunlar PYTHONPATH cihazınızı kurulu kütüphaneyi içerecek şekilde ayarladıktan sonra Python dosyanızı çalıştırır.

Bunu yüklemek için, sadece CLI yüklü olduğundan emin olun (gem install iron_worker_ng, Ruby sürümünüzün 1.9.3 veya üstü olduğundan emin olun) ve daha sonra kabuğunuza aynı dizinden "iron_worker upload botoworker" komutunu çalıştırın. botoworker.worker dosyası şu adreste bulunmaktadır.

Bu yardımcı olur umarız!

+0

+1 Demir işçisi belgelerinde olmalı ki! –

+0

@KevinSimper Üzerinde çalışıyoruz. :) Ekibimiz hızlı bir şekilde yineleniyor, bu da bizim dokümantasyon ekibimiz için (ki bu benim sorumluluğumdur) bunu takip etmeyi zorlaştırıyor. Yine de, bunu umarım çok daha iyi bir hale getirmesi gereken bazı şeyler üzerinde çalışıyoruz. – Paddy

+1

kevin - gerek yok. Çok yakında .worker'da 'pip' komut desteğine sahip olacağız. – iced

13

Yeni iron_worker sürümü, pip komutunun yerel desteğine sahiptir. Yani, gerek:

runtime "python" 
exec "something.py" 

pip "boto" 
pip "someotherpip" 

full_remote_build true 
+2

Belirli bir sürüme iğnelemek isterseniz, şöyle bir şey yapmanız gerekir: "pip" boto "," == 2.9.2 " –

İlgili konular